<?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>223629</bug_id>
          
          <creation_ts>2021-03-23 01:42:15 -0700</creation_ts>
          <short_desc>[JSC] Functor for WeakGCMap::ensureValue must not invoke GC</short_desc>
          <delta_ts>2021-03-24 14:13:49 -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>New Bugs</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=222739</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1742710</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 01:42:15 -0700</bug_when>
    <thetext>[JSC] Functor for WeakGCMap::ensureValue must not invoke GC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742715</commentid>
    <comment_count>1</comment_count>
      <attachid>423997</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 01:45:43 -0700</bug_when>
    <thetext>Created attachment 423997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742716</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 01:45:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/75619217&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742717</commentid>
    <comment_count>3</comment_count>
      <attachid>423997</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 01:48:17 -0700</bug_when>
    <thetext>Comment on attachment 423997
Patch

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

&gt; Source/JavaScriptCore/runtime/WeakGCMap.h:73
&gt; +        // If functor invokes GC, GC can prune WeakGCMap, and manipulate HashMap while we are touching it in ensure function.
&gt; +        // The functor must not invoke GC.
&gt; +        DisallowGC disallowGC;

I do not want to put DeferGC here since we would like to be aware about the scope of DeferGC explicitly. Deferring GC is not generally good. We would like to invoke GC responsively.
If we use DeferGC, we should make DeferGC scope small, and we should be aware of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742720</commentid>
    <comment_count>4</comment_count>
      <attachid>423998</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 01:53:22 -0700</bug_when>
    <thetext>Created attachment 423998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742796</commentid>
    <comment_count>5</comment_count>
      <attachid>423998</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-23 08:06:49 -0700</bug_when>
    <thetext>Comment on attachment 423998
Patch

r=me.  Please make sure that the EWS failures are not real.  FYI, I&apos;ve started a re-run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742830</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-23 09:14:10 -0700</bug_when>
    <thetext>Instead of deferring GC we can switch to a double hashing algorithm (separate get and add), or we can make code that conditionally rehashes if the hash table is modified during the ensure functor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742836</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-23 09:22:41 -0700</bug_when>
    <thetext>It&apos;s too bad we can&apos;t reuse any of the logic in WeakMapImpl for this, which already should have to deal with this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742838</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-23 09:25:52 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #7)
&gt; It&apos;s too bad we can&apos;t reuse any of the logic in WeakMapImpl for this, which
&gt; already should have to deal with this issue.

There is very similar code to this in

JSDOMGlobalObject::createCrossOriginFunction/JSDOMGlobalObject::createCrossOriginGetterSetter. 

We should make sure that case is also fixed and potentially add a test if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742861</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-23 09:46:35 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #3)
&gt; Comment on attachment 423997 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423997&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/WeakGCMap.h:73
&gt; &gt; +        // If functor invokes GC, GC can prune WeakGCMap, and manipulate HashMap while we are touching it in ensure function.
&gt; &gt; +        // The functor must not invoke GC.
&gt; &gt; +        DisallowGC disallowGC;
&gt; 
&gt; I do not want to put DeferGC here since we would like to be aware about the
&gt; scope of DeferGC explicitly. Deferring GC is not generally good. We would
&gt; like to invoke GC responsively.
&gt; If we use DeferGC, we should make DeferGC scope small, and we should be
&gt; aware of that.

Would it work to instead of using DeferGC for this, we added a bit to WeakGCMap that makes pruneStaleEntries() a no-op while it is set? And then a function like ensureValue would set that bit while it was running?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742868</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-23 09:53:25 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Yusuke Suzuki from comment #3)
&gt; &gt; Comment on attachment 423997 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=423997&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/WeakGCMap.h:73
&gt; &gt; &gt; +        // If functor invokes GC, GC can prune WeakGCMap, and manipulate HashMap while we are touching it in ensure function.
&gt; &gt; &gt; +        // The functor must not invoke GC.
&gt; &gt; &gt; +        DisallowGC disallowGC;
&gt; &gt; 
&gt; &gt; I do not want to put DeferGC here since we would like to be aware about the
&gt; &gt; scope of DeferGC explicitly. Deferring GC is not generally good. We would
&gt; &gt; like to invoke GC responsively.
&gt; &gt; If we use DeferGC, we should make DeferGC scope small, and we should be
&gt; &gt; aware of that.
&gt; 
&gt; Would it work to instead of using DeferGC for this, we added a bit to
&gt; WeakGCMap that makes pruneStaleEntries() a no-op while it is set? And then a
&gt; function like ensureValue would set that bit while it was running?

if GC can run, and the setter is not reachable by GC, and we don&apos;t prune the pointer, wouldn&apos;t simply skipping pruning means we&apos;ll get a dangling pointer because GC can sweep that setter away later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742872</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-23 09:55:35 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #10)
&gt; if GC can run, and the setter is not reachable by GC, and we don&apos;t prune the
&gt; pointer, wouldn&apos;t simply skipping pruning means we&apos;ll get a dangling pointer
&gt; because GC can sweep that setter away later?

Nevermind, I misunderstood pruning.  The pointer is already null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742920</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 11:44:44 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Instead of deferring GC we can switch to a double hashing algorithm
&gt; (separate get and add), or we can make code that conditionally rehashes if
&gt; the hash table is modified during the ensure functor.

I think the current DeferGC thing is the best way since,

1. DeferGC does not defer GC forever. When destroying DeferGC scope, we invoke GC if GC request happened during DeferGC scope. So this DeferGC only defers one function allocation.
2. While we can just defer GC for one allocation, we can avoid double hashing, and we can avoid making hash table more complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742923</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 11:46:34 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Yusuke Suzuki from comment #3)
&gt; &gt; Comment on attachment 423997 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=423997&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/runtime/WeakGCMap.h:73
&gt; &gt; &gt; +        // If functor invokes GC, GC can prune WeakGCMap, and manipulate HashMap while we are touching it in ensure function.
&gt; &gt; &gt; +        // The functor must not invoke GC.
&gt; &gt; &gt; +        DisallowGC disallowGC;
&gt; &gt; 
&gt; &gt; I do not want to put DeferGC here since we would like to be aware about the
&gt; &gt; scope of DeferGC explicitly. Deferring GC is not generally good. We would
&gt; &gt; like to invoke GC responsively.
&gt; &gt; If we use DeferGC, we should make DeferGC scope small, and we should be
&gt; &gt; aware of that.
&gt; 
&gt; Would it work to instead of using DeferGC for this, we added a bit to
&gt; WeakGCMap that makes pruneStaleEntries() a no-op while it is set? And then a
&gt; function like ensureValue would set that bit while it was running?

I think DeferGC is better since this makes collecting dead Weak handles &amp; shrinking later.
When comparing (1) not collecting dead Weak handles until the next Full GC and (2) defer GC for one function allocation, (2) is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742924</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 11:47:53 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; (In reply to Sam Weinig from comment #7)
&gt; &gt; It&apos;s too bad we can&apos;t reuse any of the logic in WeakMapImpl for this, which
&gt; &gt; already should have to deal with this issue.
&gt; 
&gt; There is very similar code to this in
&gt; 
&gt; JSDOMGlobalObject::createCrossOriginFunction/JSDOMGlobalObject::
&gt; createCrossOriginGetterSetter. 
&gt; 
&gt; We should make sure that case is also fixed and potentially add a test if
&gt; possible.

I think the existing test is failing because of DisallowGC, and this ensures that we are not invoking GC which incurs WeakGCMap modification. So crashing tests are guaranteeing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742927</commentid>
    <comment_count>15</comment_count>
      <attachid>424043</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 11:49:16 -0700</bug_when>
    <thetext>Created attachment 424043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743065</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-23 16:36:44 -0700</bug_when>
    <thetext>Committed r274911 (235681@main): &lt;https://commits.webkit.org/235681@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743068</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-23 16:54:41 -0700</bug_when>
    <thetext>Why are we deferring *both* at all call sites of ensureValue *and* inside ensureValue? It seems like we are holding up our pants using both belts and suspenders. There is probably a good reason, but I can’t figure it out from reading the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743240</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-24 02:16:08 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #17)
&gt; Why are we deferring *both* at all call sites of ensureValue *and* inside
&gt; ensureValue? It seems like we are holding up our pants using both belts and
&gt; suspenders. There is probably a good reason, but I can’t figure it out from
&gt; reading the comments.

No, inside ensureValue we are using DisallowGC, not DeferGC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743386</commentid>
    <comment_count>19</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 10:29:46 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #18)
&gt; No, inside ensureValue we are using DisallowGC, not DeferGC.

I see. Let me check my understanding: callers must not GC-allocate in the function they pass to ensureValue, unless they discover they must, in which case they can relax the restriction by doing DeferGC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743541</commentid>
    <comment_count>20</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-03-24 14:13:49 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #19)
&gt; (In reply to Yusuke Suzuki from comment #18)
&gt; &gt; No, inside ensureValue we are using DisallowGC, not DeferGC.
&gt; 
&gt; I see. Let me check my understanding: callers must not GC-allocate in the
&gt; function they pass to ensureValue, unless they discover they must, in which
&gt; case they can relax the restriction by doing DeferGC.

Right. This enforces the caller to be aware that they are deferring GC while running this code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423997</attachid>
            <date>2021-03-23 01:45:43 -0700</date>
            <delta_ts>2021-03-23 01:53:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223629-20210323014542.patch</filename>
            <type>text/plain</type>
            <size>5996</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
NjA4OTJmNzUwZGEyMmViZTBhYjA4OWQ2OWNlZmUzZjcyNjMzYTllLi41YTk3ZDc1NmQzMDU1ODky
MjcwZmZiNmVhNTdjMGZiNjhlNWQwNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAyMS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEZ1bmN0b3IgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgbXVz
dCBub3QgaW52b2tlIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NjE5MjE3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmdW5jdG9yIGZv
ciBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIG11c3Qgbm90IGludm9rZSBHQy4gR0MgY2FuIHBydW5l
IGVudHJpZXMgaW4gV2Vha0dDTWFwLgorICAgICAgICBTbyB3ZSBjYW4gbW9kaWZ5IHVuZGVybHlp
bmcgSGFzaE1hcCB3aGlsZSB3ZSBhcmUganVzdCB0b3VjaGluZyBpdCBmb3IgSGFzaE1hcDo6ZW5z
dXJlLiBUaGlzCisgICAgICAgIGNhbiBjb3JydXB0IEhhc2hNYXAuIFRvIGVuc3VyZSB0aGlzIGlu
dmFyaWFudCwgd2UgcHV0IERpc2FsbG93R0MgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUuCisg
ICAgICAgIFNvIHdlIGNhbm5vdCBpbnZva2UgR0MgaW4gdGhlIGZ1bmN0b3Igb2YgdGhhdCBmdW5j
dGlvbiAob3RoZXJ3aXNlLCBhc3NlcnRpb24gaGl0cykuCisKKyAgICAgICAgQW5kIHdlIHVzZSBE
ZWZlckdDIGluIGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uIC8gY3JlYXRlQ3VzdG9tU2V0dGVy
RnVuY3Rpb24gdG8gYXZvaWQgaW52b2tpbmcKKyAgICAgICAgR0MgaW4gV2Vha0dDTWFwOjplbnN1
cmVWYWx1ZS4gVGhpcyBkZWZlcnMgR0MgaW52b2NhdGlvbiB1bnRpbCB0aGlzIERlZmVyR0Mgc2Nv
cGUgaXMgZGVzdHJveWVkLAorICAgICAgICBhbmQgZW5zdXJlcyB0aGF0IGZ1bmN0b3IgaW52b2tl
ZCBieSBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIHdpbGwgbm90IGNhdXNlIEdDLgorCisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRl
ckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOgorCiAyMDIxLTAzLTIyICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSlNDdXN0b21HZXR0ZXJGdW5jdGlv
bi9KU0N1c3RvbVNldHRlckZ1bmN0aW9uIHNob3VsZCB1c2UgSWRlbnRpZmllciBmb3IgdGhlaXIg
ZmllbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCA3
OWZiZTk0YjdmZGIxN2UxNTVkYTBjYTk1NjE0NzkwMjZiMTY4NDJiLi5iY2RiZGU1MmQ5MzQ1Yjc4
ZmEwMTFkYTBhOTRmNzIxYmZiZjNlZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCkBAIC0zNTIxLDE3ICszNTIxLDIzIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6OmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90CiAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdl
KGJ1dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7
CiB9CiAKLXN0YXRpYyBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21HZXR0ZXJG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitzdGF0aWMgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWVG
dW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiB7Cisg
ICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdD
IHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6
ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mg
d2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxv
b2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVW
YWx1ZShnZXRWYWx1ZUZ1bmMsIFsmXSB7Ci0gICAgICAgIHJldHVybiBKU0N1c3RvbUdldHRlckZ1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0VmFsdWVGdW5jLCBkb21BdHRyaWJ1dGUpOworICAgICAgICByZXR1cm4gSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
Z2V0VmFsdWVGdW5jLCBkb21BdHRyaWJ1dGUpOwogICAgIH0pOwogfQogCi1zdGF0aWMgSlNDdXN0
b21TZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHB1dFZhbHVlRnVuYykKK3N0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0
b21TZXR0ZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCiB7Cisg
ICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdD
IHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6
ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mg
d2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxv
b2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVW
YWx1ZShwdXRWYWx1ZUZ1bmMsIFsmXSB7Ci0gICAgICAgIHJldHVybiBKU0N1c3RvbVNldHRlckZ1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgcHV0VmFsdWVGdW5jKTsKKyAgICAgICAgcmV0dXJuIEpTQ3VzdG9tU2V0dGVyRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyk7
CiAgICAgfSk7CiB9CiAKQEAgLTM1NTMsOSArMzU1OSw5IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hCiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKChzbG90LmF0dHJp
YnV0ZXMoKSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgJiB+UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yKTsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNsb3RCYXNlR2xv
YmFsT2JqZWN0ID0gc2xvdC5zbG90QmFzZSgpLT5nbG9iYWxPYmplY3Qodm0pOwogICAgICAgICBp
ZiAoc2xvdC5jdXN0b21HZXR0ZXIoKSkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0R2V0dGVy
KGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKHNsb3RCYXNlR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QuY3VzdG9tR2V0dGVyKCksIHNsb3QuZG9tQXR0cmlidXRlKCkpKTsKKyAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0R2V0dGVyKGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKHNs
b3RCYXNlR2xvYmFsT2JqZWN0LCB2bSwgcHJvcGVydHlOYW1lLCBzbG90LmN1c3RvbUdldHRlcigp
LCBzbG90LmRvbUF0dHJpYnV0ZSgpKSk7CiAgICAgICAgIGlmIChzbG90LmN1c3RvbVNldHRlcigp
KQotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoY3JlYXRlQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24oc2xvdEJhc2VHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdC5jdXN0b21TZXR0
ZXIoKSkpOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoY3JlYXRlQ3VzdG9tU2V0
dGVyRnVuY3Rpb24oc2xvdEJhc2VHbG9iYWxPYmplY3QsIHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3Qu
Y3VzdG9tU2V0dGVyKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDTWFwLmgKaW5kZXggZTM4MGYyOTViMDFjYWJkZWNjODZkNmZjNDAyMjQ2OWQyMzUy
MThhNy4uZWQ5NWU4YjcyM2ZjOTc2N2IwMzc2YzNmMDQyMzE0OTMxNmRiODNmZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiV2Vhay5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTY3LDYgKzY4LDkgQEAgY2xhc3MgV2Vha0dD
TWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ01hcEJhc2UgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiAgICAgVmFsdWVBcmcqIGVuc3VyZVZhbHVlKGNvbnN0IEtleVR5cGUmIGtleSwg
RnVuY3RvciYmIGZ1bmN0b3IpCiAgICAgeworICAgICAgICAvLyBJZiBmdW5jdG9yIGludm9rZXMg
R0MsIEdDIGNhbiBwcnVuZSBXZWFrR0NNYXAsIGFuZCBtYW5pcHVsYXRlIEhhc2hNYXAgd2hpbGUg
d2UgYXJlIHRvdWNoaW5nIGl0IGluIGVuc3VyZSBmdW5jdGlvbi4KKyAgICAgICAgLy8gVGhlIGZ1
bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDLgorICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5lbnN1cmUoa2V5LCBzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBWYWx1ZUFyZyogdmFsdWUgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5ICYm
ICF2YWx1ZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423998</attachid>
            <date>2021-03-23 01:53:22 -0700</date>
            <delta_ts>2021-03-23 08:06:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223629-20210323015321.patch</filename>
            <type>text/plain</type>
            <size>8117</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0ODUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
NjA4OTJmNzUwZGEyMmViZTBhYjA4OWQ2OWNlZmUzZjcyNjMzYTllLi41YTk3ZDc1NmQzMDU1ODky
MjcwZmZiNmVhNTdjMGZiNjhlNWQwNjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAyMS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEZ1bmN0b3IgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgbXVz
dCBub3QgaW52b2tlIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NjE5MjE3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBmdW5jdG9yIGZv
ciBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIG11c3Qgbm90IGludm9rZSBHQy4gR0MgY2FuIHBydW5l
IGVudHJpZXMgaW4gV2Vha0dDTWFwLgorICAgICAgICBTbyB3ZSBjYW4gbW9kaWZ5IHVuZGVybHlp
bmcgSGFzaE1hcCB3aGlsZSB3ZSBhcmUganVzdCB0b3VjaGluZyBpdCBmb3IgSGFzaE1hcDo6ZW5z
dXJlLiBUaGlzCisgICAgICAgIGNhbiBjb3JydXB0IEhhc2hNYXAuIFRvIGVuc3VyZSB0aGlzIGlu
dmFyaWFudCwgd2UgcHV0IERpc2FsbG93R0MgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUuCisg
ICAgICAgIFNvIHdlIGNhbm5vdCBpbnZva2UgR0MgaW4gdGhlIGZ1bmN0b3Igb2YgdGhhdCBmdW5j
dGlvbiAob3RoZXJ3aXNlLCBhc3NlcnRpb24gaGl0cykuCisKKyAgICAgICAgQW5kIHdlIHVzZSBE
ZWZlckdDIGluIGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uIC8gY3JlYXRlQ3VzdG9tU2V0dGVy
RnVuY3Rpb24gdG8gYXZvaWQgaW52b2tpbmcKKyAgICAgICAgR0MgaW4gV2Vha0dDTWFwOjplbnN1
cmVWYWx1ZS4gVGhpcyBkZWZlcnMgR0MgaW52b2NhdGlvbiB1bnRpbCB0aGlzIERlZmVyR0Mgc2Nv
cGUgaXMgZGVzdHJveWVkLAorICAgICAgICBhbmQgZW5zdXJlcyB0aGF0IGZ1bmN0b3IgaW52b2tl
ZCBieSBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIHdpbGwgbm90IGNhdXNlIEdDLgorCisgICAgICAg
ICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRl
ckZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAg
ICAgKiBydW50aW1lL1dlYWtHQ01hcC5oOgorCiAyMDIxLTAzLTIyICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gSlNDdXN0b21HZXR0ZXJGdW5jdGlv
bi9KU0N1c3RvbVNldHRlckZ1bmN0aW9uIHNob3VsZCB1c2UgSWRlbnRpZmllciBmb3IgdGhlaXIg
ZmllbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCA3
OWZiZTk0YjdmZGIxN2UxNTVkYTBjYTk1NjE0NzkwMjZiMTY4NDJiLi5iY2RiZGU1MmQ5MzQ1Yjc4
ZmEwMTFkYTBhOTRmNzIxYmZiZjNlZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCkBAIC0zNTIxLDE3ICszNTIxLDIzIEBAIEJ1dHRlcmZseSogSlNPYmpl
Y3Q6OmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90CiAgICAgcmV0dXJuIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93UHJvcGVydHlTdG9yYWdl
KGJ1dHRlcmZseSgpLCB2bSwgdGhpcywgc3RydWN0dXJlKHZtKSwgb2xkU2l6ZSwgbmV3U2l6ZSk7
CiB9CiAKLXN0YXRpYyBKU0N1c3RvbUdldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0b21HZXR0ZXJG
dW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWVGdW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVB
bm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCitzdGF0aWMgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMgZ2V0VmFsdWVG
dW5jLCBPcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGUpCiB7Cisg
ICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdD
IHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6
ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mg
d2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxv
b2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tR2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVW
YWx1ZShnZXRWYWx1ZUZ1bmMsIFsmXSB7Ci0gICAgICAgIHJldHVybiBKU0N1c3RvbUdldHRlckZ1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgZ2V0VmFsdWVGdW5jLCBkb21BdHRyaWJ1dGUpOworICAgICAgICByZXR1cm4gSlNDdXN0
b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
Z2V0VmFsdWVGdW5jLCBkb21BdHRyaWJ1dGUpOwogICAgIH0pOwogfQogCi1zdGF0aWMgSlNDdXN0
b21TZXR0ZXJGdW5jdGlvbiogY3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHV0VmFsdWVGdW5j
IHB1dFZhbHVlRnVuYykKK3N0YXRpYyBKU0N1c3RvbVNldHRlckZ1bmN0aW9uKiBjcmVhdGVDdXN0
b21TZXR0ZXJGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCiB7Cisg
ICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1bmN0b3IgbXVzdCBub3QgaW52b2tlIEdD
IHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGluIHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6
ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhlcmUgKDEpIG5vdCB0byBpbnZva2UgR0Mg
d2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxv
b2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgcmV0dXJuIGdsb2JhbE9iamVjdC0+Y3VzdG9tU2V0dGVyRnVuY3Rpb25NYXAoKS5lbnN1cmVW
YWx1ZShwdXRWYWx1ZUZ1bmMsIFsmXSB7Ci0gICAgICAgIHJldHVybiBKU0N1c3RvbVNldHRlckZ1
bmN0aW9uOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5
TmFtZSwgcHV0VmFsdWVGdW5jKTsKKyAgICAgICAgcmV0dXJuIEpTQ3VzdG9tU2V0dGVyRnVuY3Rp
b246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyk7
CiAgICAgfSk7CiB9CiAKQEAgLTM1NTMsOSArMzU1OSw5IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93
blByb3BlcnR5RGVzY3JpcHRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0
eU5hCiAgICAgICAgIGRlc2NyaXB0b3Iuc2V0QWNjZXNzb3JEZXNjcmlwdG9yKChzbG90LmF0dHJp
YnV0ZXMoKSB8IFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikgJiB+UHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yKTsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIHNsb3RCYXNlR2xv
YmFsT2JqZWN0ID0gc2xvdC5zbG90QmFzZSgpLT5nbG9iYWxPYmplY3Qodm0pOwogICAgICAgICBp
ZiAoc2xvdC5jdXN0b21HZXR0ZXIoKSkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0R2V0dGVy
KGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKHNsb3RCYXNlR2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUsIHNsb3QuY3VzdG9tR2V0dGVyKCksIHNsb3QuZG9tQXR0cmlidXRlKCkpKTsKKyAgICAg
ICAgICAgIGRlc2NyaXB0b3Iuc2V0R2V0dGVyKGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKHNs
b3RCYXNlR2xvYmFsT2JqZWN0LCB2bSwgcHJvcGVydHlOYW1lLCBzbG90LmN1c3RvbUdldHRlcigp
LCBzbG90LmRvbUF0dHJpYnV0ZSgpKSk7CiAgICAgICAgIGlmIChzbG90LmN1c3RvbVNldHRlcigp
KQotICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoY3JlYXRlQ3VzdG9tU2V0dGVyRnVu
Y3Rpb24oc2xvdEJhc2VHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdC5jdXN0b21TZXR0
ZXIoKSkpOworICAgICAgICAgICAgZGVzY3JpcHRvci5zZXRTZXR0ZXIoY3JlYXRlQ3VzdG9tU2V0
dGVyRnVuY3Rpb24oc2xvdEJhc2VHbG9iYWxPYmplY3QsIHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3Qu
Y3VzdG9tU2V0dGVyKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
c2xvdC5nZXRWYWx1ZShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvV2Vha0dDTWFwLmgKaW5kZXggZTM4MGYyOTViMDFjYWJkZWNjODZkNmZjNDAyMjQ2OWQyMzUy
MThhNy4uZWQ5NWU4YjcyM2ZjOTc2N2IwMzc2YzNmMDQyMzE0OTMxNmRiODNmZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDTWFwLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJEZWZlckdDLmgiCiAjaW5jbHVkZSAiV2Vhay5oIgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAgLTY3LDYgKzY4LDkgQEAgY2xhc3MgV2Vha0dD
TWFwIGZpbmFsIDogcHVibGljIFdlYWtHQ01hcEJhc2UgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiAgICAgVmFsdWVBcmcqIGVuc3VyZVZhbHVlKGNvbnN0IEtleVR5cGUmIGtleSwg
RnVuY3RvciYmIGZ1bmN0b3IpCiAgICAgeworICAgICAgICAvLyBJZiBmdW5jdG9yIGludm9rZXMg
R0MsIEdDIGNhbiBwcnVuZSBXZWFrR0NNYXAsIGFuZCBtYW5pcHVsYXRlIEhhc2hNYXAgd2hpbGUg
d2UgYXJlIHRvdWNoaW5nIGl0IGluIGVuc3VyZSBmdW5jdGlvbi4KKyAgICAgICAgLy8gVGhlIGZ1
bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDLgorICAgICAgICBEaXNhbGxvd0dDIGRpc2FsbG93R0M7
CiAgICAgICAgIEFkZFJlc3VsdCByZXN1bHQgPSBtX21hcC5lbnN1cmUoa2V5LCBzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBWYWx1ZUFyZyogdmFsdWUgPSByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5ICYm
ICF2YWx1ZSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGZiM2Q3YWRiMTY0NmRkYjY4NTg2NTEyN2ViYjRlY2MwZDM4ZmVl
YTMuLjY1YmVmNjZkZjQ4YTM4ZThkMWFjYjFhM2E0NDM2YzYxNzQyZDgwNDUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEZ1bmN0b3IgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgbXVz
dCBub3QgaW52b2tlIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM2MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGpzL2RvbS93ZWFrLWdjLW1hcC1lbnN1cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZv
a2UtZ2MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vd2Vhay1nYy1tYXAt
ZW5zdXJlLXZhbHVlLXNob3VsZC1ub3QtaW52b2tlLWdjLmh0bWw6IEFkZGVkLgorCiAyMDIxLTAz
LTIzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFNWRyBs
aW5rcyBuYXZpZ2F0ZSBvbmx5IHRvIGludGVybmFsIGFuaW1hdGlvbiBlbGVtZW50cyBhbmQgPHZp
ZXc+IGFuY2hvcnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS93ZWFrLWdjLW1hcC1l
bnN1cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZva2UtZ2MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvanMvZG9tL3dlYWstZ2MtbWFwLWVuc3VyZS12YWx1ZS1zaG91bGQtbm90LWludm9rZS1nYy1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGMxMmNkNWJhODMyMGVmNmUxYmM2OGM2MDQ2NTNjNTdi
MzRlOTM0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2RvbS93ZWFrLWdjLW1h
cC1lbnN1cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZva2UtZ2MtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsOSBAQAorRG8gbm90IGludm9rZSBHQyB3aGlsZSBtb2RpZnlpbmcgV2Vha0dDTWFwCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvZG9tL3dl
YWstZ2MtbWFwLWVuc3VyZS12YWx1ZS1zaG91bGQtbm90LWludm9rZS1nYy5odG1sIGIvTGF5b3V0
VGVzdHMvanMvZG9tL3dlYWstZ2MtbWFwLWVuc3VyZS12YWx1ZS1zaG91bGQtbm90LWludm9rZS1n
Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRlOTk4NGVhNjViZjk3MjhjOTNiNWFjYmUzNTkxZjcwMzMyZWVj
ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9kb20vd2Vhay1nYy1tYXAtZW5z
dXJlLXZhbHVlLXNob3VsZC1ub3QtaW52b2tlLWdjLmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBqc2NPcHRpb25zPS0tc2xvd1Bh
dGhBbGxvY3NCZXR3ZWVuR0NzPTEwIF0gLS0+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignRG8gbm90IGludm9rZSBHQyB3aGlsZSBtb2RpZnlp
bmcgV2Vha0dDTWFwJyk7Citmb3IgKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMpKSB7Cisg
ICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBuYW1lKTsKK30KKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="443534"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="443559"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424043</attachid>
            <date>2021-03-23 11:49:16 -0700</date>
            <delta_ts>2021-03-23 11:49:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223629-20210323114915.patch</filename>
            <type>text/plain</type>
            <size>11397</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0ODg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
OTU4YmRlMTUwZDc5OGM0MGNhZmMxNmE0Yjk4NTJlMDY3ZTdjNTcyLi5iODdjY2Y2ZjFlYjhjMjZk
OTkzZmZlNTAwOTk4ZWUzZGNiMGU5YzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAyMS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEZ1bmN0b3IgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgbXVz
dCBub3QgaW52b2tlIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjM2MjkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc1NjE5MjE3PgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgIFRoZSBmdW5jdG9yIGZvciBXZWFr
R0NNYXA6OmVuc3VyZVZhbHVlIG11c3Qgbm90IGludm9rZSBHQy4gR0MgY2FuIHBydW5lIGVudHJp
ZXMgaW4gV2Vha0dDTWFwLgorICAgICAgICBTbyB3ZSBjYW4gbW9kaWZ5IHVuZGVybHlpbmcgSGFz
aE1hcCB3aGlsZSB3ZSBhcmUganVzdCB0b3VjaGluZyBpdCBmb3IgSGFzaE1hcDo6ZW5zdXJlLiBU
aGlzCisgICAgICAgIGNhbiBjb3JydXB0IEhhc2hNYXAuIFRvIGVuc3VyZSB0aGlzIGludmFyaWFu
dCwgd2UgcHV0IERpc2FsbG93R0MgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUuCisgICAgICAg
IFNvIHdlIGNhbm5vdCBpbnZva2UgR0MgaW4gdGhlIGZ1bmN0b3Igb2YgdGhhdCBmdW5jdGlvbiAo
b3RoZXJ3aXNlLCBhc3NlcnRpb24gaGl0cykuCisKKyAgICAgICAgQW5kIHdlIHVzZSBEZWZlckdD
IGluIGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uIC8gY3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rp
b24gdG8gYXZvaWQgaW52b2tpbmcKKyAgICAgICAgR0MgaW4gV2Vha0dDTWFwOjplbnN1cmVWYWx1
ZS4gVGhpcyBkZWZlcnMgR0MgaW52b2NhdGlvbiB1bnRpbCB0aGlzIERlZmVyR0Mgc2NvcGUgaXMg
ZGVzdHJveWVkLAorICAgICAgICBhbmQgZW5zdXJlcyB0aGF0IGZ1bmN0b3IgaW52b2tlZCBieSBX
ZWFrR0NNYXA6OmVuc3VyZVZhbHVlIHdpbGwgbm90IGNhdXNlIEdDLgorCisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0
aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBy
dW50aW1lL1dlYWtHQ01hcC5oOgorCiAyMDIxLTAzLTIzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jp
c3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzKSBhdCB0aGUgZ2xv
YmFsIHNjb3BlIGNhbiBsb3NlIGEgcmVmZXJlbmNlIHRvIGEgV2F0Y2hwb2ludFNldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDgwYTAwMzI2OWE4ODBmOTNkN2VkZWYyMjdjNGRmZjU2NzE5ZDUyNTEuLmQzOTg2ZjNm
ODQwMmY2YWMxNjllODQ0MTUxNmUwNTNhYzA2ZDU3ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAyMS0wMy0yMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisg
ICAgICAgIFtKU0NdIEZ1bmN0b3IgZm9yIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUgbXVzdCBub3Qg
aW52b2tlIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM2MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0OiBqcy9kb20vd2Vhay1nYy1tYXAtZW5zdXJlLXZhbHVlLXNob3VsZC1ub3QtaW52b2tl
LWdjLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpjcmVhdGVDcm9zc09yaWdpbkZ1
bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2JqZWN0OjpjcmVhdGVDcm9z
c09yaWdpbkdldHRlclNldHRlcik6CisKIDIwMjEtMDMtMjMgIEFkaXR5YSBLZWVydGhpICA8YWtl
ZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW0ZDUl0gQWRkIHByZXNzZWQgc3RhdGUg
Zm9yIGJ1dHRvbi1saWtlIGNvbnRyb2xzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAKaW5kZXggNzlmYmU5NGI3ZmRiMTdlMTU1ZGEwY2E5NTYxNDc5MDI2YjE2ODQy
Yi4uYmNkYmRlNTJkOTM0NWI3OGZhMDExZGEwYTk0ZjcyMWJmYmYzZWVkNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMzUyMSwxNyArMzUyMSwyMyBA
QCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiB2
bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdAogICAgIHJldHVybiBCdXR0ZXJmbHk6OmNyZWF0ZU9y
R3Jvd1Byb3BlcnR5U3RvcmFnZShidXR0ZXJmbHkoKSwgdm0sIHRoaXMsIHN0cnVjdHVyZSh2bSks
IG9sZFNpemUsIG5ld1NpemUpOwogfQogCi1zdGF0aWMgSlNDdXN0b21HZXR0ZXJGdW5jdGlvbiog
Y3JlYXRlQ3VzdG9tR2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgR2V0VmFsdWVGdW5jIGdldFZhbHVlRnVuYywgT3B0
aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4gZG9tQXR0cmlidXRlKQorc3RhdGljIEpTQ3Vz
dG9tR2V0dGVyRnVuY3Rpb24qIGNyZWF0ZUN1c3RvbUdldHRlckZ1bmN0aW9uKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgR2V0
VmFsdWVGdW5jIGdldFZhbHVlRnVuYywgT3B0aW9uYWw8RE9NQXR0cmlidXRlQW5ub3RhdGlvbj4g
ZG9tQXR0cmlidXRlKQogeworICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9y
IG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUg
bWlkZGxlIG9mIEhhc2hNYXA6OmVuc3VyZS4KKyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgx
KSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUg
YW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hNYXAgdHdpY2UuCisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbUdldHRlckZ1
bmN0aW9uTWFwKCkuZW5zdXJlVmFsdWUoZ2V0VmFsdWVGdW5jLCBbJl0gewotICAgICAgICByZXR1
cm4gSlNDdXN0b21HZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYywgZG9tQXR0cmlidXRlKTsKKyAg
ICAgICAgcmV0dXJuIEpTQ3VzdG9tR2V0dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIGdldFZhbHVlRnVuYywgZG9tQXR0cmlidXRlKTsKICAgICB9KTsK
IH0KIAotc3RhdGljIEpTQ3VzdG9tU2V0dGVyRnVuY3Rpb24qIGNyZWF0ZUN1c3RvbVNldHRlckZ1
bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFB1dFZhbHVlRnVuYyBwdXRWYWx1ZUZ1bmMpCitzdGF0aWMgSlNDdXN0b21TZXR0ZXJG
dW5jdGlvbiogY3JlYXRlQ3VzdG9tU2V0dGVyRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQdXRWYWx1ZUZ1bmMg
cHV0VmFsdWVGdW5jKQogeworICAgIC8vIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9y
IG11c3Qgbm90IGludm9rZSBHQyBzaW5jZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUg
bWlkZGxlIG9mIEhhc2hNYXA6OmVuc3VyZS4KKyAgICAvLyBXZSB1c2UgRGVmZXJHQyBoZXJlICgx
KSBub3QgdG8gaW52b2tlIEdDIHdoZW4gZXhlY3V0aW5nIFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUg
YW5kICgyKSB0byBhdm9pZCBsb29raW5nIHVwIEhhc2hNYXAgdHdpY2UuCisgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIHJldHVybiBnbG9iYWxPYmplY3QtPmN1c3RvbVNldHRlckZ1
bmN0aW9uTWFwKCkuZW5zdXJlVmFsdWUocHV0VmFsdWVGdW5jLCBbJl0gewotICAgICAgICByZXR1
cm4gSlNDdXN0b21TZXR0ZXJGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHB1dFZhbHVlRnVuYyk7CisgICAgICAgIHJldHVybiBK
U0N1c3RvbVNldHRlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBwdXRWYWx1ZUZ1bmMpOwogICAgIH0pOwogfQogCkBAIC0zNTUzLDkgKzM1NTksOSBAQCBi
b29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUHJvcGVydHlOYQogICAgICAgICBkZXNjcmlwdG9yLnNldEFjY2Vzc29yRGVz
Y3JpcHRvcigoc2xvdC5hdHRyaWJ1dGVzKCkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3Ip
ICYgflByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBzbG90QmFzZUdsb2JhbE9iamVjdCA9IHNsb3Quc2xvdEJhc2UoKS0+Z2xvYmFsT2Jq
ZWN0KHZtKTsKICAgICAgICAgaWYgKHNsb3QuY3VzdG9tR2V0dGVyKCkpCi0gICAgICAgICAgICBk
ZXNjcmlwdG9yLnNldEdldHRlcihjcmVhdGVDdXN0b21HZXR0ZXJGdW5jdGlvbihzbG90QmFzZUds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90LmN1c3RvbUdldHRlcigpLCBzbG90LmRvbUF0
dHJpYnV0ZSgpKSk7CisgICAgICAgICAgICBkZXNjcmlwdG9yLnNldEdldHRlcihjcmVhdGVDdXN0
b21HZXR0ZXJGdW5jdGlvbihzbG90QmFzZUdsb2JhbE9iamVjdCwgdm0sIHByb3BlcnR5TmFtZSwg
c2xvdC5jdXN0b21HZXR0ZXIoKSwgc2xvdC5kb21BdHRyaWJ1dGUoKSkpOwogICAgICAgICBpZiAo
c2xvdC5jdXN0b21TZXR0ZXIoKSkKLSAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0U2V0dGVyKGNy
ZWF0ZUN1c3RvbVNldHRlckZ1bmN0aW9uKHNsb3RCYXNlR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUsIHNsb3QuY3VzdG9tU2V0dGVyKCkpKTsKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2V0U2V0
dGVyKGNyZWF0ZUN1c3RvbVNldHRlckZ1bmN0aW9uKHNsb3RCYXNlR2xvYmFsT2JqZWN0LCB2bSwg
cHJvcGVydHlOYW1lLCBzbG90LmN1c3RvbVNldHRlcigpKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NNYXAuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCmluZGV4IGUzODBmMjk1YjAxY2FiZGVj
Yzg2ZDZmYzQwMjI0NjlkMjM1MjE4YTcuLmVkOTVlOGI3MjNmYzk3NjdiMDM3NmMzZjA0MjMxNDkz
MTZkYjgzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtH
Q01hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtHQ01hcC5oCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiRGVmZXJHQy5oIgog
I2luY2x1ZGUgIldlYWsuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC02Nyw2ICs2
OCw5IEBAIGNsYXNzIFdlYWtHQ01hcCBmaW5hbCA6IHB1YmxpYyBXZWFrR0NNYXBCYXNlIHsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIFZhbHVlQXJnKiBlbnN1cmVWYWx1ZShj
b25zdCBLZXlUeXBlJiBrZXksIEZ1bmN0b3ImJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgLy8g
SWYgZnVuY3RvciBpbnZva2VzIEdDLCBHQyBjYW4gcHJ1bmUgV2Vha0dDTWFwLCBhbmQgbWFuaXB1
bGF0ZSBIYXNoTWFwIHdoaWxlIHdlIGFyZSB0b3VjaGluZyBpdCBpbiBlbnN1cmUgZnVuY3Rpb24u
CisgICAgICAgIC8vIFRoZSBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQy4KKyAgICAgICAgRGlz
YWxsb3dHQyBkaXNhbGxvd0dDOwogICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9tYXAuZW5z
dXJlKGtleSwgc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgVmFsdWVB
cmcqIHZhbHVlID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSAmJiAhdmFsdWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAppbmRleCAxM2Q2OTYwZjBkMzAyMjVhYjEwM2Y4
YmQ3NmU1MWI4Y2YzYWJkYTBmLi4yOWY2YzNiMWU4YWFhNWVjMGU1NzQyYTc3YmU3ZjMzODIwNGYz
MDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmpl
Y3QuY3BwCkBAIC0zMDYsMTggKzMwNiwyNyBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0OjpjbGVh
ckRPTUd1YXJkZWRPYmplY3RzKCkKIAogSlNGdW5jdGlvbiogSlNET01HbG9iYWxPYmplY3Q6OmNy
ZWF0ZUNyb3NzT3JpZ2luRnVuY3Rpb24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0
aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxl
eGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0aW9uLnJhd1BvaW50ZXIoKSk7CisKKyAgICAv
LyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mgc2lu
Y2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjplbnN1
cmUuCisgICAgLy8gV2UgdXNlIERlZmVyR0MgaGVyZSAoMSkgbm90IHRvIGludm9rZSBHQyB3aGVu
IGV4ZWN1dGluZyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlIGFuZCAoMikgdG8gYXZvaWQgbG9va2lu
ZyB1cCBIYXNoTWFwIHR3aWNlLgorICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBy
ZXR1cm4gbV9jcm9zc09yaWdpbkZ1bmN0aW9uTWFwLmVuc3VyZVZhbHVlKGtleSwgWyZdIHsKLSAg
ICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCks
IG5hdGl2ZUZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
bGV4aWNhbEdsb2JhbE9iamVjdCwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBu
YXRpdmVGdW5jdGlvbik7CiAgICAgfSk7CiB9CiAKIEdldHRlclNldHRlciogSlNET01HbG9iYWxP
YmplY3Q6OmNyZWF0ZUNyb3NzT3JpZ2luR2V0dGVyU2V0dGVyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBHZXRWYWx1ZUZ1bmMg
Z2V0dGVyLCBQdXRWYWx1ZUZ1bmMgc2V0dGVyKQogewogICAgIEFTU0VSVChnZXR0ZXIgfHwgc2V0
dGVyKTsKKyAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ3Jv
c3NPcmlnaW5NYXBLZXkga2V5ID0gc3RkOjptYWtlX3BhaXIobGV4aWNhbEdsb2JhbE9iamVjdCwg
Z2V0dGVyID8gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZ2V0dGVyKSA6IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHNldHRlcikpOworCisgICAgLy8gV2Vha0dDTWFwOjplbnN1cmVWYWx1ZSdzIGZ1
bmN0b3IgbXVzdCBub3QgaW52b2tlIEdDIHNpbmNlIEdDIGNhbiBtb2RpZnkgV2Vha0dDTWFwIGlu
IHRoZSBtaWRkbGUgb2YgSGFzaE1hcDo6ZW5zdXJlLgorICAgIC8vIFdlIHVzZSBEZWZlckdDIGhl
cmUgKDEpIG5vdCB0byBpbnZva2UgR0Mgd2hlbiBleGVjdXRpbmcgV2Vha0dDTWFwOjplbnN1cmVW
YWx1ZSBhbmQgKDIpIHRvIGF2b2lkIGxvb2tpbmcgdXAgSGFzaE1hcCB0d2ljZS4KKyAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgcmV0dXJuIG1fY3Jvc3NPcmlnaW5HZXR0ZXJTZXR0
ZXJNYXAuZW5zdXJlVmFsdWUoa2V5LCBbJl0gewotICAgICAgICBhdXRvJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIHJldHVybiBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2
bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwKICAgICAgICAgICAgIGdldHRlciA/IEpTQ3VzdG9tR2V0
dGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
LCBnZXR0ZXIpIDogbnVsbHB0ciwKICAgICAgICAgICAgIHNldHRlciA/IEpTQ3VzdG9tU2V0dGVy
RnVuY3Rpb246OmNyZWF0ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBz
ZXR0ZXIpIDogbnVsbHB0cik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTQxMmJiYmIzNGE1NmI5OGRmYTU3OTg5ZjgyMmUx
NjliNjJlMWQ0My4uZTFlZmU1YjIzMGE1MmI1NDAzZWU2YTRhMzllZTkwODY5YTM2ODUzYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTAzLTIzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gRnVuY3RvciBmb3IgV2Vha0dDTWFwOjplbnN1cmVW
YWx1ZSBtdXN0IG5vdCBpbnZva2UgR0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvZG9tL3dlYWstZ2MtbWFwLWVuc3VyZS12YWx1ZS1zaG91bGQt
bm90LWludm9rZS1nYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2RvbS93ZWFr
LWdjLW1hcC1lbnN1cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZva2UtZ2MuaHRtbDogQWRkZWQuCisK
IDIwMjEtMDMtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBk
b20vV2hlZWxFdmVudC5jcHA6NDc6NTg6IHJ1bnRpbWUgZXJyb3I6IG5lZ2F0aW9uIG9mIC0yMTQ3
NDgzNjQ4IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0eXBlICdpbnQnOyBjYXN0IHRvIGFuIHVu
c2lnbmVkIHR5cGUgdG8gbmVnYXRlIHRoaXMgdmFsdWUgdG8gaXRzZWxmCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9kb20vd2Vhay1nYy1tYXAtZW5zdXJlLXZhbHVlLXNob3VsZC1ub3QtaW52
b2tlLWdjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS93ZWFrLWdjLW1hcC1lbnN1
cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZva2UtZ2MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRj
MTJjZDViYTgzMjBlZjZlMWJjNjhjNjA0NjUzYzU3YjM0ZTkzNGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9qcy9kb20vd2Vhay1nYy1tYXAtZW5zdXJlLXZhbHVlLXNob3VsZC1ub3Qt
aW52b2tlLWdjLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK0RvIG5vdCBpbnZva2UgR0Mg
d2hpbGUgbW9kaWZ5aW5nIFdlYWtHQ01hcAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2RvbS93ZWFrLWdjLW1hcC1lbnN1cmUtdmFsdWUtc2hv
dWxkLW5vdC1pbnZva2UtZ2MuaHRtbCBiL0xheW91dFRlc3RzL2pzL2RvbS93ZWFrLWdjLW1hcC1l
bnN1cmUtdmFsdWUtc2hvdWxkLW5vdC1pbnZva2UtZ2MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTk5ODRl
YTY1YmY5NzI4YzkzYjVhY2JlMzU5MWY3MDMzMmVlY2ViCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvZG9tL3dlYWstZ2MtbWFwLWVuc3VyZS12YWx1ZS1zaG91bGQtbm90LWludm9r
ZS1nYy5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsganNjT3B0aW9ucz0tLXNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcz0xMCBdIC0t
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
J0RvIG5vdCBpbnZva2UgR0Mgd2hpbGUgbW9kaWZ5aW5nIFdlYWtHQ01hcCcpOworZm9yIChsZXQg
bmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzKSkgeworICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IodGhpcywgbmFtZSk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>