<?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>212556</bug_id>
          
          <creation_ts>2020-05-29 17:29:58 -0700</creation_ts>
          <short_desc>Make Options::useJIT() be the canonical source of truth on whether we should use the JIT.</short_desc>
          <delta_ts>2020-06-16 16:52:40 -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=212543</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=213270</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>
          <dependson>212561</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1657525</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-29 17:29:58 -0700</bug_when>
    <thetext>We should make Options::useJIT() means what it says instead of having to rely on a separate VM::s_canUseJIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657526</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-29 17:30:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/63780436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657529</commentid>
    <comment_count>2</comment_count>
      <attachid>400640</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-29 17:33:27 -0700</bug_when>
    <thetext>Created attachment 400640
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657584</commentid>
    <comment_count>3</comment_count>
      <attachid>400653</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-29 23:56:43 -0700</bug_when>
    <thetext>Created attachment 400653
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657627</commentid>
    <comment_count>4</comment_count>
      <attachid>400653</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-30 09:37:08 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

Ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657630</commentid>
    <comment_count>5</comment_count>
      <attachid>400653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-30 09:51:25 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Make Options::useJIT() be the canonical source of truth on whether we should use the JITs.

I’m not sure I love the premise here. Options::useJIT kinda means two things now, one thing before, and one thing after, enabling the assembler

&gt; Source/JavaScriptCore/runtime/Options.cpp:659
&gt; +void Options::finalizeJITOptions()

A better strategy is to assert this is called once. Seems wrong if a second caller finds it necessary to do this

&gt; Source/JavaScriptCore/runtime/VM.h:-807
&gt; -        ASSERT(s_canUseJITIsSet);

Can we ASSERT still we’re asking this only after JIT options are set</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657631</commentid>
    <comment_count>6</comment_count>
      <attachid>400653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-30 09:54:15 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/runtime/VM.h:-807
&gt;&gt; -        ASSERT(s_canUseJITIsSet);
&gt; 
&gt; Can we ASSERT still we’re asking this only after JIT options are set

Maybe this function should just be removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657632</commentid>
    <comment_count>7</comment_count>
      <attachid>400653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-30 09:55:43 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

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

&gt; Source/JavaScriptCore/runtime/Options.cpp:390
&gt; +};

No semicolon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657633</commentid>
    <comment_count>8</comment_count>
      <attachid>400653</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-30 10:05:59 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/runtime/Options.cpp:659
&gt;&gt; +void Options::finalizeJITOptions()
&gt; 
&gt; A better strategy is to assert this is called once. Seems wrong if a second caller finds it necessary to do this

Will do.

&gt;&gt;&gt; Source/JavaScriptCore/runtime/VM.h:-807
&gt;&gt;&gt; -        ASSERT(s_canUseJITIsSet);
&gt;&gt; 
&gt;&gt; Can we ASSERT still we’re asking this only after JIT options are set
&gt; 
&gt; Maybe this function should just be removed?

This should only be used after initializeThreading() (it was always this way or we would have fallen on our face).  As stated in my ChangeLog, removing this will cause a lot of code churn.  I opted to do that in a follow up refactoring patch if desired.

A few things to note:
1. If we want to assert that the JIT option has been finalized (which I can do), then we&apos;ll need to keep this function.
2. Checking Options::useJIT() is slightly more expensive than checking a boolean: it needs to load the offset of the boolean and then load the boolean.  This was made necessary because Clang apparently does not memoize constexpr function call reifications.  I previously had the Options offsets computed as constexpr function calls, but that made the build slow enough that people got mad.  So, this small runtime cost is the tradeoff made to keep people from complaining about build times.  That said, I don&apos;t think we check VM::canUseJIT() a lot and in perf critical paths.  So, it probably doesn&apos;t matter if we just check Options::useJIT() instead of pre-caching its value in a boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657634</commentid>
    <comment_count>9</comment_count>
      <attachid>400653</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-05-30 10:07:32 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/runtime/Options.cpp:390
&gt;&gt; +};
&gt; 
&gt; No semicolon

Oops.  This used to be a lambda in my local code, but got moved out into a function.  Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658945</commentid>
    <comment_count>10</comment_count>
      <attachid>400653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-03 18:45:10 -0700</bug_when>
    <thetext>Comment on attachment 400653
proposed patch.

Clearing r? for now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663028</commentid>
    <comment_count>11</comment_count>
      <attachid>401990</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 02:31:14 -0700</bug_when>
    <thetext>Created attachment 401990
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663146</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2020-06-16 10:35:30 -0700</bug_when>
    <thetext>I must be missing something.  How does Options::useJIT() check that we have the JIT entitlement like VM::canUseJIT() does via VM::canUseAssembler()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663155</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 10:44:08 -0700</bug_when>
    <thetext>(In reply to Michael Saboff from comment #12)
&gt; I must be missing something.  How does Options::useJIT() check that we have
&gt; the JIT entitlement like VM::canUseJIT() does via VM::canUseAssembler()?

Search for VM::computeCanUseJIT() in the patch.  It computes g_jscConfig.vm.canUseJIT just like it used to compute VM::s_canUseJIT.

The search for the check for !g_jscConfig.vm.canUseJIT in initializeThreading().  If !g_jscConfig.vm.canUseJIT, we set useJIT() to false.

In short, it works exactly as it does before except that we put the result in useJIT().  We still have a canUseJIT flag in g_jscConfig.vm.canUseJIT, but that is only used for the computation at initialization time to determine whether the JIT can be enabled or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663178</commentid>
    <comment_count>14</comment_count>
      <attachid>401990</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-16 11:42:00 -0700</bug_when>
    <thetext>Comment on attachment 401990
proposed patch.

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

&gt; Source/JavaScriptCore/runtime/JSCConfig.h:72
&gt; +    } vm;

why is this named &quot;vm&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663180</commentid>
    <comment_count>15</comment_count>
      <attachid>401990</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 11:43:15 -0700</bug_when>
    <thetext>Comment on attachment 401990
proposed patch.

Taking out of review.  Will look at a better abstraction for Options initialization before I propose another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663184</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 11:45:38 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; Comment on attachment 401990 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=401990&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCConfig.h:72
&gt; &gt; +    } vm;
&gt; 
&gt; why is this named &quot;vm&quot;?

vm&apos;s group of data in the g_jscConfig.  Kind of a namespace grouping as opposed to have a giant bag of data all at the same level.  As we add more data into the Config, having some organization will help us better compartmentalize what&apos;s what in there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663195</commentid>
    <comment_count>17</comment_count>
      <attachid>401990</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 12:17:08 -0700</bug_when>
    <thetext>Comment on attachment 401990
proposed patch.

Talked to folks offline.  Since they are ok with taking this patch as is for now, I&apos;ll defer the abstraction clean up for another patch later.  Putting back the r?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663207</commentid>
    <comment_count>18</comment_count>
      <attachid>401990</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-16 12:54:57 -0700</bug_when>
    <thetext>Comment on attachment 401990
proposed patch.

r=me

Might be worth noting your clean up plan here for those not in the slack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663236</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 14:14:49 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #18)
&gt; Comment on attachment 401990 [details]
&gt; proposed patch.
&gt; 
&gt; r=me
&gt; 
&gt; Might be worth noting your clean up plan here for those not in the slack

OK, here are the details:

JSC Options have always meant 2 different things at different times:

Meaning 1: the set of requested behavior settings, which may or may not be adopted, and may be modified / adjusted based on various constraints.

Meaning 2: the set of finalized behavior settings, which is what will actually be adopted and is fixed at some finalization point.

VM::s_canUseJIT is from the Meaning 2 set, whereas we treated Options::useJIT() as also being from the Meaning 1 set.  However, all other Options just use the storage in Options to mean Meaning 1 at initialization time, and switches to Meaning 2 after the finalization point.

The finalization point was also always nebulous.  We just relied on all clients doing the right thing and using the Option value before it is finalized without any enforcement.  VM::canUseJIT() has enforcement by asserting on VM::s_canUseJITIsSet.

This patch makes it explicit that Options have 2 meanings.  It also makes the finalization point explicit i.e. when Options::finalize() is called.  Before Options::finalized(), Options values all have Meaning 1.  After Options::finalized(), they have meaning 2.  Clients that try to use them for meaning 2 will have to assert that g_jscConfig.options.isFinalized is true.

With this formalization, we no longer need VM::s_canUseJIT, which is a special case of this.

Ideally, we will clean this up even more later by giving the 2 sets of meanings 2 distinct abstractions to disambiguate between the 2.  Maybe call the first set RequestedOptions, or OptionArguments. And keep the Options name for the second set to minimize code change.  With that, we can also statically enforce that the second set is read only by clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663242</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-16 14:30:57 -0700</bug_when>
    <thetext>Thanks for the reviews.  Landed in r263117: &lt;http://trac.webkit.org/r263117&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400640</attachid>
            <date>2020-05-29 17:33:27 -0700</date>
            <delta_ts>2020-05-29 18:19:45 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-212556.patch</filename>
            <type>text/plain</type>
            <size>13729</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9F
eGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAkocmV2aXNpb24gMjYyMzI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkK
ICAgICBib29sIGZhaWxlZCA9IGZhbHNlOwogCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5n
KCk7Ci0gICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgpOyAvLyBFbnN1cmUgb3B0aW9ucyBpcyBpbml0
aWFsaXplZCBmaXJzdC4KIAogICAgIGZvciAoYXV0byB0aWVyT3B0aW9ucyA6IHRpZXJPcHRpb25z
TGlzdCkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHNhdmVkT3B0aW9uc0J1aWxkZXI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5jdGlv
bk92ZXJyaWRlc1Rlc3QuY3BwCShyZXZpc2lvbiAyNjIzMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDcgKzM4LDYgQEAgaW50IHRlc3RGdW5jdGlvbk92ZXJyaWRlcygpCiAgICAgYm9vbCBm
YWlsZWQgPSBmYWxzZTsKIAogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIE9w
dGlvbnM6OmluaXRpYWxpemUoKTsgLy8gRW5zdXJlIG9wdGlvbnMgaXMgaW5pdGlhbGl6ZWQgZmly
c3QuCiAKICAgICBjb25zdCBjaGFyKiBvbGRGdW5jdGlvbk92ZXJyaWRlcyA9IE9wdGlvbnM6OmZ1
bmN0aW9uT3ZlcnJpZGVzKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAJ
KHJldmlzaW9uIDI2MjMyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvUGlu
Z1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcs
NiBAQCBpbnQgdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdygpCiAgICAgYm9vbCBmYWlsZWQgPSBm
YWxzZTsKIAogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIE9wdGlvbnM6Omlu
aXRpYWxpemUoKTsgLy8gRW5zdXJlIG9wdGlvbnMgaXMgaW5pdGlhbGl6ZWQgZmlyc3QuCiAKICAg
ICBhdXRvIG9yaWdTb2Z0UmVzZXJ2ZWRab25lU2l6ZSA9IE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpv
bmVTaXplKCk7CiAgICAgYXV0byBvcmlnUmVzZXJ2ZWRab25lU2l6ZSA9IE9wdGlvbnM6OnJlc2Vy
dmVkWm9uZVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjYyMzI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3MSw4ICsxMDcxLDE0IEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIEV4ZWN1dGFibGVBbGxv
Y2F0b3IqIGdsb2JhbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dvcmtBcm91bmRMZWFrcyA9IG51bGxw
dHI7CiB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemUoKQogewotICAgIGdfanNj
Q29uZmlnLmV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAg
ICBnbG9iYWxFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZp
Zy5leGVjdXRhYmxlQWxsb2NhdG9yOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgZ19qc2NDb25maWcuZXhlY3V0
YWJsZUFsbG9jYXRvciA9IG5ldyBFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgICAgICBnbG9iYWxF
eGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZpZy5leGVjdXRh
YmxlQWxsb2NhdG9yOworCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkKKyAgICAgICAg
ICAgIGluaXRpYWxpemVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7CisgICAgfSk7CiB9CiAKIEV4ZWN1
dGFibGVBbGxvY2F0b3ImIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjYyMzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNiBAQCBwdWJsaWM6CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciYgc2luZ2xldG9u
KCk7CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsK
IApAQCAtMTkyLDYgKzE5MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRXhlY3V0YWJsZUFs
bG9jYXRvcigpID0gZGVmYXVsdDsKICAgICB+RXhlY3V0YWJsZUFsbG9jYXRvcigpID0gZGVmYXVs
dDsKKworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7CiB9
OwogCiAjZWxzZQpAQCAtMjAwLDExICsyMDEsMTIgQEAgY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRv
ciA6IHB1YmxpYyBFeGVjdQogcHVibGljOgogICAgIHN0YXRpYyBFeGVjdXRhYmxlQWxsb2NhdG9y
JiBzaW5nbGV0b24oKTsKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVVuZGVybHlpbmdBbGxvY2F0b3IoKSB7IH0KIAogcHJpdmF0ZToKICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVVuZGVybHlpbmdB
bGxvY2F0b3IoKSB7IH0KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCogcGVyZm9ybUpJVE1lbWNw
eSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAko
cmV2aXNpb24gMjYyMzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDYgQEAgdm9pZCBp
bml0aWFsaXplVGhyZWFkaW5nKCkKICNlbmRpZgogCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemUoKTsKLSAgICAgICAgVk06OmNvbXB1dGVDYW5Vc2VKSVQoKTsKIAogICAg
ICAgICBpZiAoVk06OmNhblVzZUpJVCgpICYmIE9wdGlvbnM6OnVzZVNpZ2lsbENyYXNoQW5hbHl6
ZXIoKSkKICAgICAgICAgICAgIGVuYWJsZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5oCShyZXZpc2lvbiAyNjIzMjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NDb25maWcuaAkod29ya2luZyBj
b3B5KQpAQCAtNzcsOCArNzcsMTAgQEAgc3RydWN0IENvbmZpZyB7CiAgICAgICAgICAgICBKSVRX
cml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbiBqaXRXcml0ZVNlcGFyYXRlSGVhcHM7CiAgICAgICAg
ICAgICBib29sIHVzZUZhc3RQZXJtaXNpb25zSklUQ29weTsKICNlbmRpZgotCi0gICAgICAgICAg
ICBPcHRpb25zU3RvcmFnZSBvcHRpb25zOworICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgICAgICBib29sIGNhbkVuYWJsZUpJVDsKKyAgICAgICAgICAgICAgICBPcHRpb25zU3RvcmFn
ZSBzdG9yYWdlOworICAgICAgICAgICAgfSBvcHRpb25zOwogCiAgICAgICAgICAgICB2b2lkICgq
c2hlbGxUaW1lb3V0Q2hlY2tDYWxsYmFjaykoVk0mKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDI2MjMyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzc1
LDEyICszNzUsMzcgQEAgc3RhdGljIHZvaWQgY29ycmVjdE9wdGlvbnMoKQogICAgICAgICBPcHRp
b25zOjp0aHJlc2hvbGRGb3JHbG9iYWxMZXhpY2FsQmluZGluZ0Vwb2NoKCkgPSBVSU5UX01BWDsK
IH0KIAotc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCitzdGF0aWMgYm9v
bCBjYW5FbmFibGVKSVQoKQogewotI2lmICFkZWZpbmVkKE5ERUJVRykKLSAgICBPcHRpb25zOjp2
YWxpZGF0ZURGR0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOworICAgIC8vIE5vdGU6IFBsYXRm
b3JtLmggd2lsbCBlbmZvcmNlIHRoYXQgRU5BQkxFKEFTU0VNQkxFUikgaXMgdHJ1ZSBpZiBlaXRo
ZXIKKyAgICAvLyBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIG9yIGJvdGggYXJlIGVu
YWJsZWQuIFRoZSBjb2RlIGJlbG93CisgICAgLy8ganVzdCBjaGVja3MgZm9yIEVOQUJMRShKSVQp
IG9yIEVOQUJMRShZQVJSX0pJVCkgd2l0aCB0aGlzIHByZW1pc2UgaW4gbWluZC4KKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKQorICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKKyAgICAgICAgQVNTRVJUKCFnX2pzY0NvbmZpZy5v
cHRpb25zLmNhbkVuYWJsZUpJVCk7CisKKyAgICAgICAgY2hhciogY2FuVXNlSklUU3RyaW5nID0g
Z2V0ZW52KCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOworICAgICAgICBpZiAoY2FuVXNlSklUU3Ry
aW5nICYmICFhdG9pKGNhblVzZUpJVFN0cmluZykpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZSgpOworICAgICAgICBpZiAoIUV4
ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSkKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z19qc2NDb25maWcub3B0aW9ucy5jYW5FbmFibGVKSVQgPSB0cnVlOworICAgIH0pOworICAgIHJl
dHVybiBnX2pzY0NvbmZpZy5vcHRpb25zLmNhbkVuYWJsZUpJVDsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCi0jaWYgIUVOQUJMRShKSVQpCit9CisKK3N0YXRpYyB2b2lkIGRpc2Fi
bGVBbGxKSVRPcHRpb25zKCkKK3sKICAgICBPcHRpb25zOjp1c2VMTEludCgpID0gdHJ1ZTsKICAg
ICBPcHRpb25zOjp1c2VKSVQoKSA9IGZhbHNlOwogICAgIE9wdGlvbnM6OnVzZUJhc2VsaW5lSklU
KCkgPSBmYWxzZTsKQEAgLTM4OCw2ICs0MTMsMTUgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVw
ZW5kZW50T3B0aW9ucygpCiAgICAgT3B0aW9uczo6dXNlRlRMSklUKCkgPSBmYWxzZTsKICAgICBP
cHRpb25zOjp1c2VET01KSVQoKSA9IGZhbHNlOwogICAgIE9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgp
ID0gZmFsc2U7Cit9OworCitzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkK
K3sKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgT3B0aW9uczo6dmFsaWRhdGVERkdFeGNlcHRp
b25IYW5kbGluZygpID0gdHJ1ZTsKKyNlbmRpZgorI2lmICFFTkFCTEUoSklUKQorICAgIGRpc2Fi
bGVBbGxKSVRPcHRpb25zKCk7CiAjZW5kaWYKICNpZiAhRU5BQkxFKENPTkNVUlJFTlRfSlMpCiAg
ICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID0gZmFsc2U7CkBAIC00MDIsNyArNDM2LDE2
IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogI2lmICFFTkFCTEUo
RlRMX0pJVCkKICAgICBPcHRpb25zOjp1c2VGVExKSVQoKSA9IGZhbHNlOwogI2VuZGlmCi0gICAg
CisKKyNpZiBFTkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApIC8vIEZJWE1FCisgICAgLy8gT3ZlcnJp
ZGUgZ2xvYmFsbHkgZm9yIG5vdy4gTG9uZ2VyIHRlcm0gd2UnbGwganVzdCBtYWtlIHRoZSBkZWZh
dWx0CisgICAgLy8gYmUgdG8gaGF2ZSB0aGlzIG9wdGlvbiBlbmFibGVkLCBhbmQgaGF2ZSBwbGF0
Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0CisgICAgLy8gaXQganVzdCBzaWxlbnRseSB1c2UgYSBz
aW5nbGUgbWFwcGluZy4KKyAgICBPcHRpb25zOjp1c2VTZXBhcmF0ZWRXWEhlYXAoKSA9IHRydWU7
CisjZWxzZQorICAgIE9wdGlvbnM6OnVzZVNlcGFyYXRlZFdYSGVhcCgpID0gZmFsc2U7CisjZW5k
aWYKKwogI2lmICFDUFUoWDg2XzY0KSAmJiAhQ1BVKEFSTTY0KQogICAgIE9wdGlvbnM6OnVzZUNv
bmN1cnJlbnRHQygpID0gZmFsc2U7CiAjZW5kaWYKQEAgLTQ2MiwxNCArNTA1LDYgQEAgc3RhdGlj
IHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgICAgIE9wdGlvbnM6Om1heGlt
dW1FdmFsQ2FjaGVhYmxlU291cmNlTGVuZ3RoKCkgPSAxNTAwMDA7CiAgICAgICAgIE9wdGlvbnM6
OnVzZUNvbmN1cnJlbnRKSVQoKSA9IGZhbHNlOwogICAgIH0KLSNpZiBFTkFCTEUoU0VQQVJBVEVE
X1dYX0hFQVApCi0gICAgLy8gT3ZlcnJpZGUgZ2xvYmFsbHkgZm9yIG5vdy4gTG9uZ2VyIHRlcm0g
d2UnbGwganVzdCBtYWtlIHRoZSBkZWZhdWx0Ci0gICAgLy8gYmUgdG8gaGF2ZSB0aGlzIG9wdGlv
biBlbmFibGVkLCBhbmQgaGF2ZSBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0Ci0gICAgLy8g
aXQganVzdCBzaWxlbnRseSB1c2UgYSBzaW5nbGUgbWFwcGluZy4KLSAgICBPcHRpb25zOjp1c2VT
ZXBhcmF0ZWRXWEhlYXAoKSA9IHRydWU7Ci0jZWxzZQotICAgIE9wdGlvbnM6OnVzZVNlcGFyYXRl
ZFdYSGVhcCgpID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgIGlmIChPcHRpb25zOjphbHdheXNVc2VT
aGFkb3dDaGlja2VuKCkpCiAgICAgICAgIE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRoKCkg
PSAxOwpAQCAtNTE5LDEzICs1NTQsMTMgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucygpCiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uKE9wdGlvbnM6
OklEIGlkKQogewogICAgIGF1dG8gb2Zmc2V0ID0gT3B0aW9uczo6c19jb25zdE1ldGFEYXRhW2lk
XS5vZmZzZXRPZk9wdGlvbjsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
JmdfanNjQ29uZmlnLm9wdGlvbnMpICsgb2Zmc2V0OworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPigmZ19qc2NDb25maWcub3B0aW9ucy5zdG9yYWdlKSArIG9mZnNldDsKIH0K
IAogaW5saW5lIHZvaWQqIE9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQoT3B0aW9uczo6
SUQgaWQpCiB7CiAgICAgYXV0byBvZmZzZXQgPSBPcHRpb25zOjpzX2NvbnN0TWV0YURhdGFbaWRd
Lm9mZnNldE9mT3B0aW9uRGVmYXVsdDsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oJmdfanNjQ29uZmlnLm9wdGlvbnMpICsgb2Zmc2V0OworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPigmZ19qc2NDb25maWcub3B0aW9ucy5zdG9yYWdlKSArIG9mZnNl
dDsKIH0KIAogI2lmIE9TKFdJTkRPV1MpCkBAIC01OTgsOCArNjMzLDE1IEBAIHZvaWQgT3B0aW9u
czo6aW5pdGlhbGl6ZSgpCiAjZW5kaWYKIAogICAgICAgICAgICAgY29ycmVjdE9wdGlvbnMoKTsK
LSAgICAKKwogICAgICAgICAgICAgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOworI2lmIEVO
QUJMRShKSVQpCisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkgJiYgIWNhbkVuYWJs
ZUpJVCgpKSB7CisgICAgICAgICAgICAgICAgZGlzYWJsZUFsbEpJVE9wdGlvbnMoKTsKKyAgICAg
ICAgICAgICAgICByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9Cisj
ZW5kaWYKKwogCiAgICAgICAgICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFu
ZCBtYWtlIGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgogICAgICAgICAgICAgQVNTRVJUKE9w
dGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gT3B0aW9uczo6
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDI2MjMyOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDggKzg5
LDggQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuc3VyZU9w
dGlvbnNBcmVDb2hlcmVudCgpOwogCiAjZGVmaW5lIERFQ0xBUkVfT1BUSU9OX0FDQ0VTU09SUyh0
eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8sIGRlc2NyaXB0aW9uXykg
XAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wdGlvbnNTdG9yYWdlOjp0eXBlXyYgbmFtZV8o
KSB7IHJldHVybiBnX2pzY0NvbmZpZy5vcHRpb25zLm5hbWVfOyB9ICBcCi0gICAgQUxXQVlTX0lO
TElORSBzdGF0aWMgT3B0aW9uc1N0b3JhZ2U6OnR5cGVfJiBuYW1lXyMjRGVmYXVsdCgpIHsgcmV0
dXJuIGdfanNjQ29uZmlnLm9wdGlvbnMubmFtZV8jI0RlZmF1bHQ7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBPcHRpb25zU3RvcmFnZTo6dHlwZV8mIG5hbWVfKCkgeyByZXR1cm4gZ19qc2ND
b25maWcub3B0aW9ucy5zdG9yYWdlLm5hbWVfOyB9ICBcCisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgT3B0aW9uc1N0b3JhZ2U6OnR5cGVfJiBuYW1lXyMjRGVmYXVsdCgpIHsgcmV0dXJuIGdfanNj
Q29uZmlnLm9wdGlvbnMuc3RvcmFnZS5uYW1lXyMjRGVmYXVsdDsgfQogCiAgICAgRk9SX0VBQ0hf
SlNDX09QVElPTihERUNMQVJFX09QVElPTl9BQ0NFU1NPUlMpCiAjdW5kZWYgREVDTEFSRV9PUFRJ
T05fQUNDRVNTT1JTCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZp
c2lvbiAyNjIzMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5Niw2NyArMTk2LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0j
aWYgRU5BQkxFKEpJVCkKLSNpZiBBU1NFUlRfRU5BQkxFRAotYm9vbCBWTTo6c19jYW5Vc2VKSVRJ
c1NldCA9IGZhbHNlOwotI2VuZGlmCi1ib29sIFZNOjpzX2NhblVzZUpJVCA9IGZhbHNlOwotI2Vu
ZGlmCi0KIEF0b21pYzx1bnNpZ25lZD4gVk06OnNfbnVtYmVyT2ZJRHM7CiAKIERFRklORV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoVk0pOwogCi0vLyBOb3RlOiBQbGF0Zm9ybS5oIHdp
bGwgZW5mb3JjZSB0aGF0IEVOQUJMRShBU1NFTUJMRVIpIGlzIHRydWUgaWYgZWl0aGVyCi0vLyBF
TkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIG9yIGJvdGggYXJlIGVuYWJsZWQuIFRoZSBj
b2RlIGJlbG93Ci0vLyBqdXN0IGNoZWNrcyBmb3IgRU5BQkxFKEpJVCkgb3IgRU5BQkxFKFlBUlJf
SklUKSB3aXRoIHRoaXMgcHJlbWlzZSBpbiBtaW5kLgotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikK
LXN0YXRpYyBib29sIGVuYWJsZUFzc2VtYmxlcigpCi17Ci0gICAgaWYgKCFPcHRpb25zOjp1c2VK
SVQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY2hhciogY2FuVXNlSklUU3RyaW5n
ID0gZ2V0ZW52KCJKYXZhU2NyaXB0Q29yZVVzZUpJVCIpOwotICAgIGlmIChjYW5Vc2VKSVRTdHJp
bmcgJiYgIWF0b2koY2FuVXNlSklUU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGVybHlpbmdBbGxvY2F0b3IoKTsK
LSAgICBpZiAoIUV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmlzVmFsaWQoKSkgewot
ICAgICAgICBpZiAoT3B0aW9uczo6Y3Jhc2hJZkNhbnRBbGxvY2F0ZUpJVE1lbW9yeSgpKQotICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotI2VuZGlmIC8vIEVOQUJMRSghQVNTRU1CTEVSKQotCi1ib29sIFZNOjpj
YW5Vc2VBc3NlbWJsZXIoKQotewotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VLZXk7Ci0gICAgc3RhdGljIGJvb2wgZW5hYmxlZCA9IGZhbHNlOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFtdIHsKLSAgICAgICAgZW5hYmxlZCA9IGVuYWJs
ZUFzc2VtYmxlcigpOwotICAgIH0pOwotICAgIHJldHVybiBlbmFibGVkOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7IC8vIGludGVycHJldGVyIG9ubHkKLSNlbmRpZgotfQotCi12b2lkIFZNOjpj
b21wdXRlQ2FuVXNlSklUKCkKLXsKLSNpZiBFTkFCTEUoSklUKQotI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXNfY2FuVXNlSklUSXNTZXQpOwotICAgIHNfY2FuVXNlSklU
SXNTZXQgPSB0cnVlOwotI2VuZGlmCi0gICAgc19jYW5Vc2VKSVQgPSBWTTo6Y2FuVXNlQXNzZW1i
bGVyKCkgJiYgT3B0aW9uczo6dXNlSklUKCk7Ci0jZW5kaWYKLX0KLQogaW5saW5lIHVuc2lnbmVk
IFZNOjpuZXh0SUQoKQogewogICAgIGZvciAoOzspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkocmV2aXNpb24gMjYyMzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzg5LDcgKzc4OSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgRGVsZXRlUHJvcGVydHlNb2RlIG1fcHJldmlvdXNNb2RlOwogICAgIH07CiAKLSAgICBz
dGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjYW5Vc2VBc3NlbWJsZXIoKTsKICAgICBzdGF0
aWMgYm9vbCBpc0luTWluaU1vZGUoKQogICAgIHsKICAgICAgICAgcmV0dXJuICFjYW5Vc2VKSVQo
KSB8fCBPcHRpb25zOjpmb3JjZU1pbmlWTU1vZGUoKTsKQEAgLTgwMCwxMiArNzk5LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZVVubGlua2VkQ29kZUJsb2NrSmV0dGlz
b25pbmcoKSB8fCBpc0luTWluaU1vZGUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBjb21w
dXRlQ2FuVXNlSklUKCk7CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBjYW5Vc2VKSVQo
KQogICAgIHsKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBBU1NFUlQoc19jYW5Vc2VKSVRJc1Nl
dCk7Ci0gICAgICAgIHJldHVybiBzX2NhblVzZUpJVDsKKyAgICAgICAgcmV0dXJuIE9wdGlvbnM6
OnVzZUpJVCgpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0xMjMy
LDEzICsxMjI5LDYgQEAgcHJpdmF0ZToKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoVk0mKT4gbV9v
bkVhY2hNaWNyb3Rhc2tUaWNrOwogICAgIHVpbnRwdHJfdCBtX2N1cnJlbnRXZWFrUmVmVmVyc2lv
biB7IDAgfTsKIAotI2lmIEVOQUJMRShKSVQpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzX2NhblVzZUpJVElzU2V0OwotI2VuZGlmCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc19jYW5Vc2VKSVQ7Ci0jZW5kaWYKLQogICAg
IFZNKiBtX3ByZXY7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgogICAgIFZN
KiBtX25leHQ7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400653</attachid>
            <date>2020-05-29 23:56:43 -0700</date>
            <delta_ts>2020-06-16 02:31:14 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212556.patch</filename>
            <type>text/plain</type>
            <size>17651</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBA
CisyMDIwLTA1LTI5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIE9wdGlvbnM6OnVzZUpJVCgpIGJlIHRoZSBjYW5vbmljYWwgc291cmNlIG9mIHRydXRoIG9u
IHdoZXRoZXIgd2Ugc2hvdWxkIHVzZSB0aGUgSklUcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHNob3VsZCBtYWtlIE9wdGlvbnM6OnVzZUpJVCgp
IG1lYW5zIHdoYXQgaXQgc2F5cyBpbnN0ZWFkIG9mIGhhdmluZyB0byByZWx5IG9uCisgICAgICAg
IGEgc2VwYXJhdGUgVk06OnNfY2FuVXNlSklULiAgVGhpcyByZW1vdmVzIGFueSBwb3RlbnRpYWwg
Y29uZnVzaW9uIGFyaXNpbmcgZnJvbQorICAgICAgICBoYXZpbmcgMiB2YWx1ZXMgdG8gY2hlY2ss
IGFuZCBmcm9tIHVzZUpJVCgpIGJlaW5nIHRydWUgd2hlbiB3ZSBjYW4ndCBhY3R1YWxseQorICAg
ICAgICB1c2UgdGhlIEpJVHMuCisKKyAgICAgICAgKiBBUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxp
bWl0VGVzdC5jcHA6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBBUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcDoKKyAgICAgICAgKHRlc3RGdW5j
dGlvbk92ZXJyaWRlcyk6CisgICAgICAgICogQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxv
d1Rlc3QuY3BwOgorICAgICAgICAodGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdyk6CisgICAgICAg
IC0gUmVtb3ZlZCByZWR1bmRhbnQgY2FsbHMgdG8gT3B0aW9uczo6aW5pdGlhbGl6ZSgpLgorCisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkuYzoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAt
IG1vdmUgdGhlIGNhbGwgdG8gdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpIHRvIGFmdGVyIGZpbmFs
aXplTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0KCkKKyAgICAgICAgICByZXR1cm5z
LiAgVGhpcyBpcyBiZWNhdXNlIHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSBtb2RpZmllcyBKSVQg
b3B0aW9ucyBhdCBydW50aW1lCisgICAgICAgICAgYXMgcGFydCBvZiBpdHMgdGVzdGluZy4gIFRo
aXMgY2FuIHdyZWFrIGhhdm9jIG9uIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gdGhhdCBleHBlY3Rz
CisgICAgICAgICAgdGhlIG9wdGlvbnMgdG8gYmUgZnJvemVuLiAgSWRlYWxseSwgd2UnbGwgZmlu
ZCBhIHdheSBmb3IgdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpIHRvCisgICAgICAgICAgZG8gaXRz
IHdvcmsgd2l0aG91dCBjaGFuZ2luZyBKSVQgb3B0aW9ucywgYnV0IHRoYXQgaXMgbm90IGVhc3kg
dG8gZG8uICBGb3Igbm93LAorICAgICAgICAgIHdlJ2xsIGp1c3QgcnVuIGl0IGF0IHRoZSBlbmQg
YXMgYSB3b3JrYXJvdW5kLgorCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVu
dGltZS9KU0NDb25maWcuaDoKKworICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmRpc2FibGVBbGxKSVRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6cmVjb21wdXRl
RGVwZW5kZW50T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmFkZHJlc3NPZk9wdGlv
bik6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQpOgorICAg
ICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgLSBNb3ZlIHRoZSBjYWxs
cyB0byBkdW1wT3B0aW9uc0lmTmVlZGVkKCkgYW5kIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgp
IHRvIHRoZQorICAgICAgICAgIGVuZCBhZnRlciBhbGwgdGhlIG9wdGlvbnMgaGF2ZSBiZWVuIGlu
aXRpYWxpemVkIGJlY2F1c2UgdGhpcyB3aGVyZSB0aGV5IGJlbG9uZy4KKyAgICAgICAgKEpTQzo6
T3B0aW9uczo6ZmluYWxpemVKSVRPcHRpb25zKToKKyAgICAgICAgLSBMb2dpYyB0byBjaGVjayBp
ZiB0aGUgSklUcyBjYW4gYmUgZW5hYmxlZCwgYWRhcHRlZCBmcm9tIFZNLmNwcCdzIG5vdyBkZWxl
dGVkCisgICAgICAgICAgZW5hYmxlQXNzZW1ibGVyKCkuCisKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuaDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZmluYWxpemVKSVRPcHRpb25zKToKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6ZW5hYmxlQXNzZW1ibGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Vk06OmNhblVzZUFzc2VtYmxlcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlZNOjpjb21wdXRlQ2FuVXNlSklUKTogRGVsZXRlZC4KKworICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmNhblVzZUpJVCk6CisgICAgICAgIC0g
Rm9yIG5vdywgdGhpcyBpcyBqdXN0IGEgd3JhcHBlciBhcm91bmQgT3B0aW9uczo6dXNlSklUKCkg
c28gdGhhdCB3ZSBtaW5pbWl6ZQorICAgICAgICAgIHRoZSBhbW91bnQgb2YgY29kZSBjaGFuZ2Uu
ICBXZSBjYW4gcmVtb3ZlIHRoaXMgYW5kIGNoYW5nZSBhbGwgaXRzIGNsaWVudHMgdG8KKyAgICAg
ICAgICB1c2UgT3B0aW9uczo6dXNlSklUKCkgaW4gYSBmb2xsb3cgdXAgcmVmYWN0b3JpbmcgcGF0
Y2ggaWYgZGVzaXJlZC4KKwogMjAyMC0wNS0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZSBuZWVkIHRvIHByb3Blcmx5IG1vZGVsIGhlYXAgcmFuZ2VzIG9m
IERlbGV0ZSBpbiBERkcvQjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
RXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAkocmV2aXNpb24gMjYy
MzM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjgsNyArMTI4LDYgQEAgaW50IHRlc3RFeGVjdXRp
b25UaW1lTGltaXQoKQogICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7CiAKICAgICBKU0M6OmluaXRp
YWxpemVUaHJlYWRpbmcoKTsKLSAgICBPcHRpb25zOjppbml0aWFsaXplKCk7IC8vIEVuc3VyZSBv
cHRpb25zIGlzIGluaXRpYWxpemVkIGZpcnN0LgogCiAgICAgZm9yIChhdXRvIHRpZXJPcHRpb25z
IDogdGllck9wdGlvbnNMaXN0KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2F2ZWRPcHRpb25z
QnVpbGRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25P
dmVycmlkZXNUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHAJKHJldmlzaW9uIDI2MjMzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zOCw3ICszOCw2IEBAIGludCB0ZXN0RnVuY3Rpb25PdmVycmlkZXMoKQog
ICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7CiAKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKLSAgICBPcHRpb25zOjppbml0aWFsaXplKCk7IC8vIEVuc3VyZSBvcHRpb25zIGlzIGluaXRp
YWxpemVkIGZpcnN0LgogCiAgICAgY29uc3QgY2hhciogb2xkRnVuY3Rpb25PdmVycmlkZXMgPSBP
cHRpb25zOjpmdW5jdGlvbk92ZXJyaWRlcygpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxv
d1Rlc3QuY3BwCShyZXZpc2lvbiAyNjIzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNyw3
ICsxMTcsNiBAQCBpbnQgdGVzdFBpbmdQb25nU3RhY2tPdmVyZmxvdygpCiAgICAgYm9vbCBmYWls
ZWQgPSBmYWxzZTsKIAogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIE9wdGlv
bnM6OmluaXRpYWxpemUoKTsgLy8gRW5zdXJlIG9wdGlvbnMgaXMgaW5pdGlhbGl6ZWQgZmlyc3Qu
CiAKICAgICBhdXRvIG9yaWdTb2Z0UmVzZXJ2ZWRab25lU2l6ZSA9IE9wdGlvbnM6OnNvZnRSZXNl
cnZlZFpvbmVTaXplKCk7CiAgICAgYXV0byBvcmlnUmVzZXJ2ZWRab25lU2l6ZSA9IE9wdGlvbnM6
OnJlc2VydmVkWm9uZVNpemUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5jCShyZXZpc2lvbiAyNjIzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL3Rlc3RzL3Rlc3RhcGkuYwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjEwMSw3ICsyMTAxLDYg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShjb250ZXh0KTsKICAgICB9CiAgICAgZmFpbGVkIHw9IHRlc3RUeXBlZEFycmF5
Q0FQSSgpOwotICAgIGZhaWxlZCB8PSB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCk7CiAgICAgZmFp
bGVkIHw9IHRlc3RGdW5jdGlvbk92ZXJyaWRlcygpOwogICAgIGZhaWxlZCB8PSB0ZXN0R2xvYmFs
Q29udGV4dFdpdGhGaW5hbGl6ZXIoKTsKICAgICBmYWlsZWQgfD0gdGVzdFBpbmdQb25nU3RhY2tP
dmVyZmxvdygpOwpAQCAtMjE1Nyw2ICsyMTU2LDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAKICAgICBmYWlsZWQgPSBmaW5hbGl6ZU11bHRpdGhyZWFkZWRNdWx0aVZNRXhl
Y3V0aW9uVGVzdCgpIHx8IGZhaWxlZDsKIAorICAgIC8vIERvbid0IHJ1biB0aGlzIHRpbGwgYWZ0
ZXIgdGhlIE11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdCBoYXMgZmluaXNoZWQuCisg
ICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSBtb2RpZmllcyBK
SVQgb3B0aW9ucyBhdCBydW50aW1lCisgICAgLy8gYXMgcGFydCBvZiBpdHMgdGVzdGluZy4gVGhp
cyBjYW4gd3JlYWsgaGF2b2Mgb24gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSB0aGF0CisgICAgLy8g
ZXhwZWN0cyB0aGUgb3B0aW9ucyB0byBiZSBmcm96ZW4uIElkZWFsbHksIHdlJ2xsIGZpbmQgYSB3
YXkgZm9yIHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKQorICAgIC8vIHRvIGRvIGl0cyB3b3JrIHdp
dGhvdXQgY2hhbmdpbmcgSklUIG9wdGlvbnMsIGJ1dCB0aGF0IGlzIG5vdCBlYXN5IHRvIGRvLgor
ICAgIC8vIEZvciBub3csIHdlJ2xsIGp1c3QgcnVuIGl0IGhlcmUgYXQgdGhlIGVuZCBhcyBhIHdv
cmthcm91bmQuCisgICAgZmFpbGVkIHw9IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKTsKKwogICAg
IGlmIChmYWlsZWQpIHsKICAgICAgICAgcHJpbnRmKCJGQUlMOiBTb21lIHRlc3RzIGZhaWxlZC5c
biIpOwogICAgICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAyNjIzMzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmcoKQogI2VuZGlmCiAKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZSgp
OwotICAgICAgICBWTTo6Y29tcHV0ZUNhblVzZUpJVCgpOworICAgICAgICBPcHRpb25zOjpmaW5h
bGl6ZUpJVE9wdGlvbnMoKTsKIAogICAgICAgICBpZiAoVk06OmNhblVzZUpJVCgpICYmIE9wdGlv
bnM6OnVzZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKSkKICAgICAgICAgICAgIGVuYWJsZVNpZ2lsbENy
YXNoQW5hbHl6ZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0Nv
bmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0Nv
bmZpZy5oCShyZXZpc2lvbiAyNjIzMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NDb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCArNzcsMTAgQEAgc3RydWN0IENv
bmZpZyB7CiAgICAgICAgICAgICBKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbiBqaXRXcml0
ZVNlcGFyYXRlSGVhcHM7CiAgICAgICAgICAgICBib29sIHVzZUZhc3RQZXJtaXNpb25zSklUQ29w
eTsKICNlbmRpZgotCi0gICAgICAgICAgICBPcHRpb25zU3RvcmFnZSBvcHRpb25zOworICAgICAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICBib29sIGNhbkVuYWJsZUpJVDsKKyAgICAg
ICAgICAgICAgICBPcHRpb25zU3RvcmFnZSBzdG9yYWdlOworICAgICAgICAgICAgfSBvcHRpb25z
OwogCiAgICAgICAgICAgICB2b2lkICgqc2hlbGxUaW1lb3V0Q2hlY2tDYWxsYmFjaykoVk0mKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDI2MjMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQXNzZW1ibGVy
Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ1BVLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIkxMSW50Q29tbW9uLmgiCiAjaW5jbHVkZSAiTWluaW11bVJlc2VydmVk
Wm9uZVNpemUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0zNzUsMTIgKzM3Niw4IEBAIHN0
YXRpYyB2b2lkIGNvcnJlY3RPcHRpb25zKCkKICAgICAgICAgT3B0aW9uczo6dGhyZXNob2xkRm9y
R2xvYmFsTGV4aWNhbEJpbmRpbmdFcG9jaCgpID0gVUlOVF9NQVg7CiB9CiAKLXN0YXRpYyB2b2lk
IHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQorc3RhdGljIHZvaWQgZGlzYWJsZUFsbEpJVE9w
dGlvbnMoKQogewotI2lmICFkZWZpbmVkKE5ERUJVRykKLSAgICBPcHRpb25zOjp2YWxpZGF0ZURG
R0V4Y2VwdGlvbkhhbmRsaW5nKCkgPSB0cnVlOwotI2VuZGlmCi0jaWYgIUVOQUJMRShKSVQpCiAg
ICAgT3B0aW9uczo6dXNlTExJbnQoKSA9IHRydWU7CiAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBm
YWxzZTsKICAgICBPcHRpb25zOjp1c2VCYXNlbGluZUpJVCgpID0gZmFsc2U7CkBAIC0zODgsNiAr
Mzg1LDE3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIE9w
dGlvbnM6OnVzZUZUTEpJVCgpID0gZmFsc2U7CiAgICAgT3B0aW9uczo6dXNlRE9NSklUKCkgPSBm
YWxzZTsKICAgICBPcHRpb25zOjp1c2VSZWdFeHBKSVQoKSA9IGZhbHNlOworCisgICAgT3B0aW9u
czo6dXNlQ29uY3VycmVudEpJVCgpID0gZmFsc2U7Cit9OworCitzdGF0aWMgdm9pZCByZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKCkKK3sKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgT3B0aW9u
czo6dmFsaWRhdGVERkdFeGNlcHRpb25IYW5kbGluZygpID0gdHJ1ZTsKKyNlbmRpZgorI2lmICFF
TkFCTEUoSklUKQorICAgIGRpc2FibGVBbGxKSVRPcHRpb25zKCk7CiAjZW5kaWYKICNpZiAhRU5B
QkxFKENPTkNVUlJFTlRfSlMpCiAgICAgT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpID0gZmFs
c2U7CkBAIC01MTksMTMgKzUyNywxMyBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRP
cHRpb25zKCkKIGlubGluZSB2b2lkKiBPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24oT3B0aW9uczo6
SUQgaWQpCiB7CiAgICAgYXV0byBvZmZzZXQgPSBPcHRpb25zOjpzX2NvbnN0TWV0YURhdGFbaWRd
Lm9mZnNldE9mT3B0aW9uOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigm
Z19qc2NDb25maWcub3B0aW9ucykgKyBvZmZzZXQ7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KCZnX2pzY0NvbmZpZy5vcHRpb25zLnN0b3JhZ2UpICsgb2Zmc2V0OwogfQog
CiBpbmxpbmUgdm9pZCogT3B0aW9uczo6YWRkcmVzc09mT3B0aW9uRGVmYXVsdChPcHRpb25zOjpJ
RCBpZCkKIHsKICAgICBhdXRvIG9mZnNldCA9IE9wdGlvbnM6OnNfY29uc3RNZXRhRGF0YVtpZF0u
b2Zmc2V0T2ZPcHRpb25EZWZhdWx0OwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigmZ19qc2NDb25maWcub3B0aW9ucykgKyBvZmZzZXQ7CisgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KCZnX2pzY0NvbmZpZy5vcHRpb25zLnN0b3JhZ2UpICsgb2Zmc2V0
OwogfQogCiAjaWYgT1MoV0lORE9XUykKQEAgLTU5OCw3ICs2MDYsNyBAQCB2b2lkIE9wdGlvbnM6
OmluaXRpYWxpemUoKQogI2VuZGlmCiAKICAgICAgICAgICAgIGNvcnJlY3RPcHRpb25zKCk7Ci0g
ICAgCisKICAgICAgICAgICAgIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKTsKIAogICAgICAg
ICAgICAgLy8gRG8gcmFuZ2UgY2hlY2tzIHdoZXJlIG5lZWRlZCBhbmQgbWFrZSBjb3JyZWN0aW9u
cyB0byB0aGUgb3B0aW9uczoKQEAgLTYwNyw5ICs2MTUsNiBAQCB2b2lkIE9wdGlvbnM6OmluaXRp
YWxpemUoKQogICAgICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXpl
QWZ0ZXJXYXJtVXAoKSA+PSAwKTsKICAgICAgICAgICAgIEFTU0VSVChPcHRpb25zOjpjcml0aWNh
bEdDTWVtb3J5VGhyZXNob2xkKCkgPiAwLjAgJiYgT3B0aW9uczo6Y3JpdGljYWxHQ01lbW9yeVRo
cmVzaG9sZCgpIDwgMS4wKTsKIAotICAgICAgICAgICAgZHVtcE9wdGlvbnNJZk5lZWRlZCgpOwot
ICAgICAgICAgICAgZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KCk7Ci0KICNpZiBIQVZFKE1BQ0hf
RVhDRVBUSU9OUykKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9u
cygpKQogICAgICAgICAgICAgICAgIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwpAQCAtNjM5LDkg
KzY0NCw1MCBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgT3B0aW9u
czo6ZHVtcFphcHBlZENlbGxDcmFzaERhdGEoKSA9CiAgICAgICAgICAgICAgICAgKGh3UGh5c2lj
YWxDUFVNYXgoKSA+PSA0KSAmJiAoaHdMM0NhY2hlU2l6ZSgpID49IHN0YXRpY19jYXN0PGludDY0
X3Q+KDYgKiBNQikpOwogI2VuZGlmCisKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hv
dWxkIG9ubHkgYmUgZG9uZSBhdCB0aGUgZW5kIGFmdGVyIGFsbCBvcHRpb25zCisgICAgICAgICAg
ICAvLyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCisgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVl
ZGVkKCk7CisgICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKICAgICAgICAg
fSk7CiB9CiAKKy8vIE5vdGU6IFBsYXRmb3JtLmggd2lsbCBlbmZvcmNlIHRoYXQgRU5BQkxFKEFT
U0VNQkxFUikgaXMgdHJ1ZSBpZiBlaXRoZXIKKy8vIEVOQUJMRShKSVQpIG9yIEVOQUJMRShZQVJS
X0pJVCkgb3IgYm90aCBhcmUgZW5hYmxlZC4gVGhlIGNvZGUgYmVsb3cKKy8vIGp1c3QgY2hlY2tz
IGZvciBFTkFCTEUoSklUKSBvciBFTkFCTEUoWUFSUl9KSVQpIHdpdGggdGhpcyBwcmVtaXNlIGlu
IG1pbmQuCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKK3ZvaWQgT3B0aW9uczo6ZmluYWxpemVKSVRP
cHRpb25zKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlS2V5LCBbXSB7CisgICAgICAgIEFTU0VSVCghZ19qc2NDb25maWcub3B0
aW9ucy5jYW5FbmFibGVKSVQpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmICghT3B0
aW9uczo6dXNlSklUKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNo
YXIqIGNhblVzZUpJVFN0cmluZyA9IGdldGVudigiSmF2YVNjcmlwdENvcmVVc2VKSVQiKTsKKyAg
ICAgICAgICAgIGlmIChjYW5Vc2VKSVRTdHJpbmcgJiYgIWF0b2koY2FuVXNlSklUU3RyaW5nKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6aW5pdGlhbGl6ZVVuZGVybHlpbmdBbGxvY2F0b3IoKTsKKyAgICAgICAgICAgIGlmICghRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ19qc2NDb25maWcub3B0aW9ucy5jYW5FbmFibGVKSVQgPSB0cnVl
OworICAgICAgICB9IHdoaWxlIChmYWxzZSk7CisKKyAgICAgICAgaWYgKCFnX2pzY0NvbmZpZy5v
cHRpb25zLmNhbkVuYWJsZUpJVCkgeworICAgICAgICAgICAgZGlzYWJsZUFsbEpJVE9wdGlvbnMo
KTsKKyAgICAgICAgICAgIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKTsKKyAgICAgICAgfQor
ICAgIH0pOworfQorI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKIHZvaWQgT3B0aW9uczo6
ZHVtcE9wdGlvbnNJZk5lZWRlZCgpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmR1bXBPcHRpb25zKCkp
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDI2MjMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc0LDYgKzc0LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisgICAgc3RhdGljIHZvaWQg
ZmluYWxpemVKSVRPcHRpb25zKCk7CiAKICAgICAvLyBQYXJzZXMgYSBzdHJpbmcgb2Ygb3B0aW9u
cyB3aGVyZSBlYWNoIG9wdGlvbiBpcyBvZiB0aGUgZm9ybWF0ICItLTxvcHRpb25OYW1lPj08dmFs
dWU+IgogICAgIC8vIGFuZCBhcmUgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuIFRoZSBsZWFkaW5nICIt
LSIgaXMgb3B0aW9uYWwgYW5kIHdpbGwgYmUgaWdub3JlZC4KQEAgLTg5LDggKzkwLDggQEAgcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuc3VyZU9wdGlvbnNBcmVD
b2hlcmVudCgpOwogCiAjZGVmaW5lIERFQ0xBUkVfT1BUSU9OX0FDQ0VTU09SUyh0eXBlXywgbmFt
ZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8sIGRlc2NyaXB0aW9uXykgXAotICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIE9wdGlvbnNTdG9yYWdlOjp0eXBlXyYgbmFtZV8oKSB7IHJldHVy
biBnX2pzY0NvbmZpZy5vcHRpb25zLm5hbWVfOyB9ICBcCi0gICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgT3B0aW9uc1N0b3JhZ2U6OnR5cGVfJiBuYW1lXyMjRGVmYXVsdCgpIHsgcmV0dXJuIGdfanNj
Q29uZmlnLm9wdGlvbnMubmFtZV8jI0RlZmF1bHQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRp
YyBPcHRpb25zU3RvcmFnZTo6dHlwZV8mIG5hbWVfKCkgeyByZXR1cm4gZ19qc2NDb25maWcub3B0
aW9ucy5zdG9yYWdlLm5hbWVfOyB9ICBcCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgT3B0aW9u
c1N0b3JhZ2U6OnR5cGVfJiBuYW1lXyMjRGVmYXVsdCgpIHsgcmV0dXJuIGdfanNjQ29uZmlnLm9w
dGlvbnMuc3RvcmFnZS5uYW1lXyMjRGVmYXVsdDsgfQogCiAgICAgRk9SX0VBQ0hfSlNDX09QVElP
TihERUNMQVJFX09QVElPTl9BQ0NFU1NPUlMpCiAjdW5kZWYgREVDTEFSRV9PUFRJT05fQUNDRVNT
T1JTCkBAIC0xMzEsNCArMTMyLDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgc3RydWN0IE9wdGlv
blJlYWRlcjsKIH07CiAKKyNpZiAhRU5BQkxFKEFTU0VNQkxFUikKK2lubGluZSB2b2lkIE9wdGlv
bnM6OmZpbmFsaXplSklUT3B0aW9ucygpIHsgfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjYyMzM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTYsNjcgKzE5NiwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotI2lmIEVOQUJMRShK
SVQpCi0jaWYgQVNTRVJUX0VOQUJMRUQKLWJvb2wgVk06OnNfY2FuVXNlSklUSXNTZXQgPSBmYWxz
ZTsKLSNlbmRpZgotYm9vbCBWTTo6c19jYW5Vc2VKSVQgPSBmYWxzZTsKLSNlbmRpZgotCiBBdG9t
aWM8dW5zaWduZWQ+IFZNOjpzX251bWJlck9mSURzOwogCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKFZNKTsKIAotLy8gTm90ZTogUGxhdGZvcm0uaCB3aWxsIGVuZm9yY2Ug
dGhhdCBFTkFCTEUoQVNTRU1CTEVSKSBpcyB0cnVlIGlmIGVpdGhlcgotLy8gRU5BQkxFKEpJVCkg
b3IgRU5BQkxFKFlBUlJfSklUKSBvciBib3RoIGFyZSBlbmFibGVkLiBUaGUgY29kZSBiZWxvdwot
Ly8ganVzdCBjaGVja3MgZm9yIEVOQUJMRShKSVQpIG9yIEVOQUJMRShZQVJSX0pJVCkgd2l0aCB0
aGlzIHByZW1pc2UgaW4gbWluZC4KLQotI2lmIEVOQUJMRShBU1NFTUJMRVIpCi1zdGF0aWMgYm9v
bCBlbmFibGVBc3NlbWJsZXIoKQotewotICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNoYXIqIGNhblVzZUpJVFN0cmluZyA9IGdldGVudigi
SmF2YVNjcmlwdENvcmVVc2VKSVQiKTsKLSAgICBpZiAoY2FuVXNlSklUU3RyaW5nICYmICFhdG9p
KGNhblVzZUpJVFN0cmluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7Ci0gICAgaWYgKCFF
eGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYg
KE9wdGlvbnM6OmNyYXNoSWZDYW50QWxsb2NhdGVKSVRNZW1vcnkoKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLSNlbmRpZiAvLyBFTkFCTEUoIUFTU0VNQkxFUikKLQotYm9vbCBWTTo6Y2FuVXNlQXNzZW1i
bGVyKCkKLXsKLSNpZiBFTkFCTEUoQVNTRU1CTEVSKQotICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlS2V5OwotICAgIHN0YXRpYyBib29sIGVuYWJsZWQgPSBmYWxzZTsKLSAgICBzdGQ6OmNh
bGxfb25jZShvbmNlS2V5LCBbXSB7Ci0gICAgICAgIGVuYWJsZWQgPSBlbmFibGVBc3NlbWJsZXIo
KTsKLSAgICB9KTsKLSAgICByZXR1cm4gZW5hYmxlZDsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNl
OyAvLyBpbnRlcnByZXRlciBvbmx5Ci0jZW5kaWYKLX0KLQotdm9pZCBWTTo6Y29tcHV0ZUNhblVz
ZUpJVCgpCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIFJFTEVB
U0VfQVNTRVJUKCFzX2NhblVzZUpJVElzU2V0KTsKLSAgICBzX2NhblVzZUpJVElzU2V0ID0gdHJ1
ZTsKLSNlbmRpZgotICAgIHNfY2FuVXNlSklUID0gVk06OmNhblVzZUFzc2VtYmxlcigpICYmIE9w
dGlvbnM6OnVzZUpJVCgpOwotI2VuZGlmCi19Ci0KIGlubGluZSB1bnNpZ25lZCBWTTo6bmV4dElE
KCkKIHsKICAgICBmb3IgKDs7KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDI2MjMzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc4OSw3ICs3ODksNiBAQCBwdWJsaWM6CiAgICAgICAgIERlbGV0
ZVByb3BlcnR5TW9kZSBtX3ByZXZpb3VzTW9kZTsKICAgICB9OwogCi0gICAgc3RhdGljIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgY2FuVXNlQXNzZW1ibGVyKCk7CiAgICAgc3RhdGljIGJvb2wgaXNJ
bk1pbmlNb2RlKCkKICAgICB7CiAgICAgICAgIHJldHVybiAhY2FuVXNlSklUKCkgfHwgT3B0aW9u
czo6Zm9yY2VNaW5pVk1Nb2RlKCk7CkBAIC04MDAsMTIgKzc5OSwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBPcHRpb25zOjp1c2VVbmxpbmtlZENvZGVCbG9ja0pldHRpc29uaW5nKCkgfHwg
aXNJbk1pbmlNb2RlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgY29tcHV0ZUNhblVzZUpJ
VCgpOwogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2FuVXNlSklUKCkKICAgICB7CiAj
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgQVNTRVJUKHNfY2FuVXNlSklUSXNTZXQpOwotICAgICAg
ICByZXR1cm4gc19jYW5Vc2VKSVQ7CisgICAgICAgIHJldHVybiBPcHRpb25zOjp1c2VKSVQoKTsK
ICNlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTIzMiwxMyArMTIyOSw2
IEBAIHByaXZhdGU6CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFZNJik+IG1fb25FYWNoTWljcm90
YXNrVGljazsKICAgICB1aW50cHRyX3QgbV9jdXJyZW50V2Vha1JlZlZlcnNpb24geyAwIH07CiAK
LSNpZiBFTkFCTEUoSklUKQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgc19jYW5Vc2VKSVRJc1NldDsKLSNlbmRpZgotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIHNfY2FuVXNlSklUOwotI2VuZGlmCi0KICAgICBWTSogbV9wcmV2
OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KICAgICBWTSogbV9uZXh0OyAv
LyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401990</attachid>
            <date>2020-06-16 02:31:14 -0700</date>
            <delta_ts>2020-06-16 12:54:57 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212556.patch</filename>
            <type>text/plain</type>
            <size>44996</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OCBA
QAorMjAyMC0wNi0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBPcHRpb25zOjp1c2VKSVQoKSBiZSB0aGUgY2Fub25pY2FsIHNvdXJjZSBvZiB0cnV0aCBv
biB3aGV0aGVyIHdlIHNob3VsZCB1c2UgdGhlIEpJVC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU1NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NjM3ODA0MzY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWZ0ZXIgcjI2MzA1NSwgT3B0aW9uczo6dXNlSklUKCkgYWx3YXlzIGVxdWFscyBWTTo6Y2Fu
VXNlSklUKCkgYWZ0ZXIgY2FuVXNlSklUKCkKKyAgICAgICAgaGFzIGJlZW4gY29tcHV0ZWQuICBU
aGlzIHBhdGNoIHJlbW92ZXMgVk06OmNhblVzZUpJVCgpLCBhbmQgcmVwbGFjZXMgYWxsIGNhbGxz
IHRvCisgICAgICAgIGl0IHdpdGggY2FsbHMgdG8gT3B0aW9uczo6dXNlSklUKCkuCisKKyAgICAg
ICAgSW4gdGhlIG9sZCBjb2RlLCBWTTo6Y2FuVXNlSklUKCkgd291bGQgYXNzZXJ0IHNfY2FuVXNl
SklUSXNTZXQgdG8gZW5zdXJlIHRoYXQKKyAgICAgICAgaXRzIGNsaWVudHMgd2lsbCBub3QgYWNj
ZXNzIHNfY2FuVXNlSklUIGJlZm9yZSBpdCBpcyBpbml0aWFsaXplZC4gIFdlIG5vdCBoYXZlIGFu
CisgICAgICAgIGVxdWl2YWxlbnQgbWVjaGFuaXNtIHdpdGggT3B0aW9ucy4gIFRoaXMgaXMgaG93
IGl0IHdvcmtzOgorCisgICAgICAgIDEuIFRoZXJlIGFyZSAyIG5ldyBPcHRpb25zIGZsYWdzIGlu
IHRoZSBnX2pzY0NvbmZpZzoKKyAgICAgICAgICAgICAgICBnX2pzY0NvbmZpZy5vcHRpb25zLmlz
RmluYWxpemVkCisgICAgICAgICAgICAgICAgZ19qc2NDb25maWcub3B0aW9ucy5hbGxvd1VuZmlu
YWxpemVkQWNjZXNzCisKKyAgICAgICAgICAgZ19qc2NDb25maWcub3B0aW9ucy5pc0ZpbmFsaXpl
ZCBtZWFucyB0aGF0IGFsbCBPcHRpb25zIHZhbHVlcyBhcmUgZmluYWxpemVkCisgICAgICAgICAg
IGkuZS4gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgYW5kIHJlYWR5IHRvIGJlIGZyb3plbiBp
biB0aGUgQ29uZmlnLgorCisgICAgICAgICAgIGdfanNjQ29uZmlnLm9wdGlvbnMuaXNGaW5hbGl6
ZWQgaXMgc2V0IGJ5IGluaXRpYWxpemVUaHJlYWRpbmcoKSBieSBjYWxsaW5nCisgICAgICAgICAg
IE9wdGlvbnM6OmZpbmFsaXplKCkgb25jZSBvcHRpb25zIGluaXRpYWxpemF0aW9uIGlzIGNvbXBs
ZXRlLgorCisgICAgICAgICAgIGdfanNjQ29uZmlnLm9wdGlvbnMuYWxsb3dVbmZpbmFsaXplZEFj
Y2VzcyBpcyBhbiBhbGxvd2FuY2UgZm9yIGNsaWVudHMgdG8KKyAgICAgICAgICAgYWNjZXNzIE9w
dGlvbnMgdmFsdWVzIGJlZm9yZSB0aGV5IGFyZSBmaW5hbGl6ZWQuICBUaGlzIGlzIG9ubHkgbmVl
ZGVkIGluCisgICAgICAgICAgIG9wdGlvbnMgaW5pdGlhbGl6YXRpb24gY29kZSB3aGVyZSBPcHRp
b25zIHZhbHVlcyBhcmUgcmVhZCBhbmQgd3JpdHRlbiB0by4KKworICAgICAgICAgICBnX2pzY0Nv
bmZpZy5vcHRpb25zLmFsbG93VW5maW5hbGl6ZWRBY2Nlc3MgaXMgc2V0IGFuZCBjbGVhcmVkIHVz
aW5nIHRoZQorICAgICAgICAgICBPcHRpb25zOjpBbGxvd1VuZmluYWxpemVkQWNjZXNzU2NvcGUg
UkFJSSBvYmplY3QuICBUaGUgZmV3IHBpZWNlcyBvZiBjb2RlIHRoYXQKKyAgICAgICAgICAgZG8g
b3B0aW9ucyBpbml0aWFsaXphdGlvbiB3aWxsIGluc3RhbnRpYXRlIHRoaXMgc2NvcGUgb2JqZWN0
LgorCisgICAgICAgIDIuIEFsbCBPcHRpb25zIGFjY2Vzc29ycyAoZS5nLiBPcHRpb246OnVzZUpJ
VCgpKSB3aWxsIG5vdyBhc3NlcnQgdGhhdCBlaXRoZXIKKyAgICAgICAgICAgZ19qc2NDb25maWcu
b3B0aW9ucy5hbGxvd1VuZmluYWxpemVkQWNjZXNzIG9yIGdfanNjQ29uZmlnLm9wdGlvbnMuaXNG
aW5hbGl6ZWQKKyAgICAgICAgICAgaXMgc2V0LgorCisgICAgICAgIDMuIFNpbmNlIHIyNjMwNTUs
IE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKSBlbnN1cmVzIHRoYXQgaWYgdXNl
SklUKCkgaXMKKyAgICAgICAgICAgZmFsc2UsIGFsbCBvdGhlciBKSVQgb3B0aW9ucyAoZS5nLiB1
c2VCYXNlbGluZUpJVCgpLCB1c2VERlRKSVQoKSwgdXNlRlRMSklUKCksCisgICAgICAgICAgIGV0
Yy4pIGFyZSBhbHNvIGZhbHNlLiAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgdXNlQkJRSklUKCkgYW5k
IHVzZU9NR0pJVCgpIHRvIHRoYXQKKyAgICAgICAgICAgbGlzdC4KKworICAgICAgICAgICBXaXRo
IHRoaXMsIGNoZWNrcyBmb3IgdXNlSklUKCkgYXJlIG5vdyByZWR1bmRhbnQgaWYgdGhlcmUncyBh
bHNvIGFub3RoZXIgSklUCisgICAgICAgICAgIG9wdGlvbiBjaGVjaywgZS5nLiB1c2VSZWdFeHBK
SVQoKSBvciB1c2VERkdKSVQoKS4gIFdoZW4gcmVkdW5kYW50LCB0aGlzIHBhdGNoCisgICAgICAg
ICAgIGVsaWRlcyB0aGUgdXNlSklUKCkgY2hlY2sgKHdoaWNoIHVzZWQgdG8gYmUgYSBWTTo6Y2Fu
VXNlSklUKCkgY2hlY2spLgorCisgICAgICAgICogQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1p
dFRlc3QuY3BwOgorICAgICAgICAodGVzdEV4ZWN1dGlvblRpbWVMaW1pdCk6CisgICAgICAgICog
QVBJL3Rlc3RzL0Z1bmN0aW9uT3ZlcnJpZGVzVGVzdC5jcHA6CisgICAgICAgICh0ZXN0RnVuY3Rp
b25PdmVycmlkZXMpOgorICAgICAgICAqIEFQSS90ZXN0cy9QaW5nUG9uZ1N0YWNrT3ZlcmZsb3dU
ZXN0LmNwcDoKKyAgICAgICAgKHRlc3RQaW5nUG9uZ1N0YWNrT3ZlcmZsb3cpOgorICAgICAgICAt
IFJlbW92ZWQgcmVkdW5kYW50IGNhbGxzIHRvIE9wdGlvbnM6OmluaXRpYWxpemUoKS4KKworICAg
ICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLmM6CisgICAgICAgIChtYWluKToKKyAgICAgICAgLSBt
b3ZlIHRoZSBjYWxsIHRvIHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSB0byBhZnRlciBmaW5hbGl6
ZU11bHRpdGhyZWFkZWRNdWx0aVZNRXhlY3V0aW9uVGVzdCgpCisgICAgICAgICAgcmV0dXJucy4g
IFRoaXMgaXMgYmVjYXVzZSB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkgbW9kaWZpZXMgSklUIG9w
dGlvbnMgYXQgcnVudGltZQorICAgICAgICAgIGFzIHBhcnQgb2YgaXRzIHRlc3RpbmcuICBUaGlz
IGNhbiB3cmVhayBoYXZvYyBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIHRoYXQgZXhwZWN0cwor
ICAgICAgICAgIHRoZSBvcHRpb25zIHRvIGJlIGZyb3plbi4gIElkZWFsbHksIHdlJ2xsIGZpbmQg
YSB3YXkgZm9yIHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKSB0bworICAgICAgICAgIGRvIGl0cyB3
b3JrIHdpdGhvdXQgY2hhbmdpbmcgSklUIG9wdGlvbnMsIGJ1dCB0aGF0IGlzIG5vdCBlYXN5IHRv
IGRvLiAgRm9yIG5vdywKKyAgICAgICAgICB3ZSdsbCBqdXN0IHJ1biBpdCBhdCB0aGUgZW5kIGFz
IGEgd29ya2Fyb3VuZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVtYmVyT2ZBcmd1bWVu
dFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZUZv
ckFyZ3VtZW50KToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjppc1N1cHBvcnRlZCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucyk6CisgICAgICAgIChKU0M6OkhlYXA6
Oml0ZXJhdGVFeGVjdXRpbmdBbmRDb21waWxpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVt
b3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3Rv
cFRoZVBlcmlwaGVyeSk6CisgICAgICAgIChKU0M6OkhlYXA6OnN1c3BlbmRDb21waWxlclRocmVh
ZHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXN1bWVDb21waWxlclRocmVhZHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjphZGRDb3JlQ29uc3RyYWludHMpOgorICAgICAgICAqIGludGVycHJldGVy
L0Fic3RyYWN0UEMuY3BwOgorICAgICAgICAoSlNDOjpBYnN0cmFjdFBDOjpBYnN0cmFjdFBDKToK
KyAgICAgICAgKiBqaXQvSklUVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpj
dGlOYXRpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVDb25zdHJ1
Y3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpjdGlOYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3MpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpjdGlJbnRlcm5hbEZ1bmN0aW9uQ29uc3RydWN0KToKKyAgICAg
ICAgKEpTQzo6SklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKToKKyAgICAgICAgKiBqc2MuY3Bw
OgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAgKGpzY21h
aW4pOgorICAgICAgICAqIGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpzZXRGdW5jdGlvbkVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
RXZhbEVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0UHJvZ3JhbUVudHJ5cG9p
bnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgor
ICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OnNob3VsZEpJVCk6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICogcnVudGltZS9KU0NDb25m
aWcuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6Om51bWJlclRvU3RyaW5nV2F0Y2hw
b2ludFNldCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6
aml0RW5hYmxlZEJ5RGVmYXVsdCk6CisgICAgICAgIChKU0M6OmRpc2FibGVBbGxKSVRPcHRpb25z
KToKKworICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgLSBNb3Zl
IHRoZSBjYWxscyB0byBkdW1wT3B0aW9uc0lmTmVlZGVkKCkgYW5kIGVuc3VyZU9wdGlvbnNBcmVD
b2hlcmVudCgpIHRvIHRoZQorICAgICAgICAgIGVuZCBhZnRlciBhbGwgdGhlIG9wdGlvbnMgaGF2
ZSBiZWVuIGluaXRpYWxpemVkIGJlY2F1c2UgdGhpcyB3aGVyZSB0aGV5IGJlbG9uZy4KKworICAg
ICAgICAoSlNDOjpPcHRpb25zOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNl
dE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpzZXRPcHRpb24pOgorICAgICAgICAo
SlNDOjpPcHRpb25zOjpkdW1wQWxsT3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmVu
c3VyZU9wdGlvbnNBcmVDb2hlcmVudCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgIChKU0M6Ok9wdGlvbnM6OkFsbG93VW5maW5hbGl6ZWRBY2Nlc3NTY29wZTo6QWxsb3dV
bmZpbmFsaXplZEFjY2Vzc1Njb3BlKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6QWxsb3dVbmZp
bmFsaXplZEFjY2Vzc1Njb3BlOjp+QWxsb3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuY3Bw
OgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6
OmNvbXBpbGVNYXRjaE9ubHkpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAg
ICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6aXNXYXRjaGFibGUgY29uc3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Y29tcHV0ZUNhblVzZUpJVCk6
CisgICAgICAgIChKU0M6OlZNOjpWTSk6CisgICAgICAgIChKU0M6OlZNOjpnZXRIb3N0RnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmlzSW5NaW5p
TW9kZSk6CisgICAgICAgIChKU0M6OlZNOjpjYW5Vc2VKSVQpOiBEZWxldGVkLgorICAgICAgICAq
IHdhc20vV2FzbUNhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpXYXNtOjppc1N1cHBvcnRl
ZCk6CisgICAgICAgICogd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Oldh
c206OnNob3VsZEpJVCk6CisgICAgICAgICogd2FzbS9XYXNtU2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OnNob3VsZEpJVCk6CisKIDIwMjAtMDYtMTYgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBTSUdBQlJUIGhhbmRsZXIgZm9yIG5vbiBP
UyhEQVJXSU4pIGJ1aWxkcyB0byB0aGUganNjIHNoZWxsIHdpdGggdGhlIC1zIG9wdGlvbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyNSw2ICsyOTI1LDcgQEAgc3Rh
dGljIGJvb2wgaXNNSlNGaWxlKGNoYXIgKmZpbGVuYW1lKQogCiB2b2lkIENvbW1hbmRMaW5lOjpw
YXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAgT3B0aW9uczo6QWxs
b3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlIHNjb3BlOwogICAgIE9wdGlvbnM6OmluaXRpYWxpemUo
KTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6ZHVtcE9wdGlvbnMoKSkgewpAQCAtMzIzNiw5ICsz
MjM3LDEyIEBAIGludCBqc2NtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAvLyBjb21l
cyBmaXJzdC4KICAgICBDb21tYW5kTGluZSBvcHRpb25zKGFyZ2MsIGFyZ3YpOwogCi0gICAgcHJv
Y2Vzc0NvbmZpZ0ZpbGUoT3B0aW9uczo6Y29uZmlnRmlsZSgpLCAianNjIik7Ci0gICAgaWYgKG9w
dGlvbnMubV9kdW1wKQotICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBHZW5lcmF0ZWRCeXRlY29k
ZXMoKSA9IHRydWU7CisgICAgeworICAgICAgICBPcHRpb25zOjpBbGxvd1VuZmluYWxpemVkQWNj
ZXNzU2NvcGUgc2NvcGU7CisgICAgICAgIHByb2Nlc3NDb25maWdGaWxlKE9wdGlvbnM6OmNvbmZp
Z0ZpbGUoKSwgImpzYyIpOworICAgICAgICBpZiAob3B0aW9ucy5tX2R1bXApCisgICAgICAgICAg
ICBPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkgPSB0cnVlOworICAgIH0KIAogICAg
IC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIFZNLgogICAgIEpTQzo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVj
dXRpb25UaW1lTGltaXRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCShyZXZpc2lvbiAyNjMwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOCw3ICsxMjgsNiBAQCBpbnQgdGVzdEV4ZWN1dGlvblRp
bWVMaW1pdCgpCiAgICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsKIAogICAgIEpTQzo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwotICAgIE9wdGlvbnM6OmluaXRpYWxpemUoKTsgLy8gRW5zdXJlIG9wdGlv
bnMgaXMgaW5pdGlhbGl6ZWQgZmlyc3QuCiAKICAgICBmb3IgKGF1dG8gdGllck9wdGlvbnMgOiB0
aWVyT3B0aW9uc0xpc3QpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzYXZlZE9wdGlvbnNCdWls
ZGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJy
aWRlc1Rlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvRnVuY3Rpb25PdmVycmlkZXNUZXN0LmNwcAkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9GdW5jdGlvbk92ZXJyaWRlc1Rlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM4LDcgKzM4LDYgQEAgaW50IHRlc3RGdW5jdGlvbk92ZXJyaWRlcygpCiAgICAg
Ym9vbCBmYWlsZWQgPSBmYWxzZTsKIAogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwot
ICAgIE9wdGlvbnM6OmluaXRpYWxpemUoKTsgLy8gRW5zdXJlIG9wdGlvbnMgaXMgaW5pdGlhbGl6
ZWQgZmlyc3QuCiAKICAgICBjb25zdCBjaGFyKiBvbGRGdW5jdGlvbk92ZXJyaWRlcyA9IE9wdGlv
bnM6OmZ1bmN0aW9uT3ZlcnJpZGVzKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL1BpbmdQb25nU3RhY2tPdmVyZmxvd1Rlc3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVz
dC5jcHAJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE3LDcgKzEx
Nyw2IEBAIGludCB0ZXN0UGluZ1BvbmdTdGFja092ZXJmbG93KCkKICAgICBib29sIGZhaWxlZCA9
IGZhbHNlOwogCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgT3B0aW9uczo6
aW5pdGlhbGl6ZSgpOyAvLyBFbnN1cmUgb3B0aW9ucyBpcyBpbml0aWFsaXplZCBmaXJzdC4KIAog
ICAgIGF1dG8gb3JpZ1NvZnRSZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6c29mdFJlc2VydmVk
Wm9uZVNpemUoKTsKICAgICBhdXRvIG9yaWdSZXNlcnZlZFpvbmVTaXplID0gT3B0aW9uczo6cmVz
ZXJ2ZWRab25lU2l6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90
ZXN0YXBpLmMJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
dGVzdHMvdGVzdGFwaS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMTAxLDcgKzIxMDEsNiBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICBKU0dsb2JhbENvbnRleHRS
ZWxlYXNlKGNvbnRleHQpOwogICAgIH0KICAgICBmYWlsZWQgfD0gdGVzdFR5cGVkQXJyYXlDQVBJ
KCk7Ci0gICAgZmFpbGVkIHw9IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKTsKICAgICBmYWlsZWQg
fD0gdGVzdEZ1bmN0aW9uT3ZlcnJpZGVzKCk7CiAgICAgZmFpbGVkIHw9IHRlc3RHbG9iYWxDb250
ZXh0V2l0aEZpbmFsaXplcigpOwogICAgIGZhaWxlZCB8PSB0ZXN0UGluZ1BvbmdTdGFja092ZXJm
bG93KCk7CkBAIC0yMTU3LDYgKzIxNTYsMTQgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkKIAogICAgIGZhaWxlZCA9IGZpbmFsaXplTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRp
b25UZXN0KCkgfHwgZmFpbGVkOwogCisgICAgLy8gRG9uJ3QgcnVuIHRoaXMgdGlsbCBhZnRlciB0
aGUgTXVsdGl0aHJlYWRlZE11bHRpVk1FeGVjdXRpb25UZXN0IGhhcyBmaW5pc2hlZC4KKyAgICAv
LyBUaGlzIGlzIGJlY2F1c2UgdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpIG1vZGlmaWVzIEpJVCBv
cHRpb25zIGF0IHJ1bnRpbWUKKyAgICAvLyBhcyBwYXJ0IG9mIGl0cyB0ZXN0aW5nLiBUaGlzIGNh
biB3cmVhayBoYXZvYyBvbiB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtIHRoYXQKKyAgICAvLyBleHBl
Y3RzIHRoZSBvcHRpb25zIHRvIGJlIGZyb3plbi4gSWRlYWxseSwgd2UnbGwgZmluZCBhIHdheSBm
b3IgdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCisgICAgLy8gdG8gZG8gaXRzIHdvcmsgd2l0aG91
dCBjaGFuZ2luZyBKSVQgb3B0aW9ucywgYnV0IHRoYXQgaXMgbm90IGVhc3kgdG8gZG8uCisgICAg
Ly8gRm9yIG5vdywgd2UnbGwganVzdCBydW4gaXQgaGVyZSBhdCB0aGUgZW5kIGFzIGEgd29ya2Fy
b3VuZC4KKyAgICBmYWlsZWQgfD0gdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpOworCiAgICAgaWYg
KGZhaWxlZCkgewogICAgICAgICBwcmludGYoIkZBSUw6IFNvbWUgdGVzdHMgZmFpbGVkLlxuIik7
CiAgICAgICAgIHJldHVybiAxOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDgsNyArOTQ4
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ldwogewogICAgIG1f
bnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOwogCi0gICAgbV9hcmd1bWVudFZhbHVlUHJvZmlsZXMg
PSBSZWZDb3VudGVkQXJyYXk8VmFsdWVQcm9maWxlPih2bSgpLmNhblVzZUpJVCgpID8gbmV3VmFs
dWUgOiAwKTsKKyAgICBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcyA9IFJlZkNvdW50ZWRBcnJheTxW
YWx1ZVByb2ZpbGU+KE9wdGlvbnM6OnVzZUpJVCgpID8gbmV3VmFsdWUgOiAwKTsKIH0KIAogQ29k
ZUJsb2NrKiBDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDI2MzA2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
Q2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNDk2LDEzICs0OTYsMTMgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX251bVBhcmFtZXRl
cnMgPj0gMCk7Ci0gICAgICAgIEFTU0VSVChtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCkg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbnVtUGFyYW1ldGVycykgfHwgIXZtKCkuY2FuVXNl
SklUKCkpOworICAgICAgICBBU1NFUlQobV9hcmd1bWVudFZhbHVlUHJvZmlsZXMuc2l6ZSgpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX251bVBhcmFtZXRlcnMpIHx8ICFPcHRpb25zOjp1c2VK
SVQoKSk7CiAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50VmFsdWVQcm9maWxlcy5zaXplKCk7CiAg
ICAgfQogCiAgICAgVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGVGb3JBcmd1bWVudCh1bnNpZ25l
ZCBhcmd1bWVudEluZGV4KQogICAgIHsKLSAgICAgICAgQVNTRVJUKHZtKCkuY2FuVXNlSklUKCkp
OyAvLyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBpbGVycyBv
ciBwbGFjZXMgdGhhdCBmaXJzdCBjaGVjayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyBi
ZWZvcmUgY2FsbGluZyB0aGlzLgorICAgICAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOyAv
LyBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIHZhcmlvdXMgSklUIGNvbXBpbGVycyBvciBw
bGFjZXMgdGhhdCBmaXJzdCBjaGVjayBudW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9maWxlcyBiZWZv
cmUgY2FsbGluZyB0aGlzLgogICAgICAgICBWYWx1ZVByb2ZpbGUmIHJlc3VsdCA9IG1fYXJndW1l
bnRWYWx1ZVByb2ZpbGVzW2FyZ3VtZW50SW5kZXhdOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBib29sIGlzU3VwcG9ydGVkKCkKIHsKLSAgICBy
ZXR1cm4gVk06OmNhblVzZUpJVCgpICYmIE9wdGlvbnM6OnVzZURGR0pJVCgpICYmIE1hY3JvQXNz
ZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKTsKKyAgICByZXR1cm4gT3B0aW9uczo6dXNl
REZHSklUKCkgJiYgTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpOwogfQog
CiBib29sIGlzU3VwcG9ydGVkRm9ySW5saW5pbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjYzMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzMCw3
ICs2MzAsNyBAQCB2b2lkIEhlYXA6OmRpZEZpbmlzaEl0ZXJhdGluZygpCiAKIHZvaWQgSGVhcDo6
Y29tcGxldGVBbGxKSVRQbGFucygpCiB7Ci0gICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCisgICAg
aWYgKCFPcHRpb25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShKSVQp
CiAgICAgSklUV29ya2xpc3Q6OmVuc3VyZUdsb2JhbFdvcmtsaXN0KCkuY29tcGxldGVBbGxGb3JW
TShtX3ZtKTsKQEAgLTY0Miw3ICs2NDIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogdm9p
ZCBIZWFwOjppdGVyYXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2Nrcyhjb25zdCBGdW5j
JiBmdW5jKQogewogICAgIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZUN1cnJlbnRseUV4ZWN1dGluZyhm
dW5jKTsKLSAgICBpZiAoVk06OmNhblVzZUpJVCgpKQorICAgIGlmIChPcHRpb25zOjp1c2VKSVQo
KSkKICAgICAgICAgREZHOjppdGVyYXRlQ29kZUJsb2Nrc0ZvckdDKG1fdm0sIGZ1bmMpOwogfQog
CkBAIC03MDEsNyArNzAxLDcgQEAgdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2Vy
dmF0aQogdm9pZCBIZWFwOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmIHJvb3RzKQogewogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmICghVk06OmNhblVzZUpJ
VCgpKQorICAgIGlmICghT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybjsKICAgICBt
X3ZtLmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhyb290cyk7CiAgICAgbV92bS5zY2FuU2lkZVN0
YXRlKHJvb3RzKTsKQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpCiB7CiAjaWYg
RU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCFWTTo6Y2FuVXNlSklUKCkpCisgICAgaWYgKCFPcHRp
b25zOjp1c2VKSVQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKICAgICAgICAgREZHOjpleGlzdGluZ1dvcmts
aXN0Rm9ySW5kZXgoaSkucmVtb3ZlRGVhZFBsYW5zKG1fdm0pOwpAQCAtMTYzOCw3ICsxNjM4LDcg
QEAgdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdDQ29uZHVjdG9yIAogICAgICAgICB9KTsK
IAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgeworICAgIGlmIChP
cHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhp
cyk7CiAgICAgICAgIGlmIChKSVRXb3JrbGlzdDo6ZW5zdXJlR2xvYmFsV29ya2xpc3QoKS5jb21w
bGV0ZUFsbEZvclZNKG1fdm0pCiAgICAgICAgICAgICAmJiBjb25uID09IEdDQ29uZHVjdG9yOjpD
b2xsZWN0b3IpCkBAIC0yMTU0LDcgKzIxNTQsNyBAQCB2b2lkIEhlYXA6OnN1c3BlbmRDb21waWxl
clRocmVhZHMoKQogICAgIC8vIFdlIGVuc3VyZSB0aGUgd29ya2xpc3RzIHNvIHRoYXQgaXQncyBu
b3QgcG9zc2libGUgZm9yIHRoZSBtdXRhdG9yIHRvIHN0YXJ0IGEgbmV3IHdvcmtsaXN0CiAgICAg
Ly8gYWZ0ZXIgd2UgaGF2ZSBzdXNwZW5kZWQgdGhlIG9uZXMgdGhhdCBoZSBoYWQgc3RhcnRlZCBi
ZWZvcmUuIFRoYXQncyBub3QgdmVyeSBleHBlbnNpdmUgc2luY2UKICAgICAvLyB0aGUgd29ya2xp
c3RzIHVzZSBBdXRvbWF0aWNUaHJlYWRzIGFueXdheS4KLSAgICBpZiAoIVZNOjpjYW5Vc2VKSVQo
KSkKKyAgICBpZiAoIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm47CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQogICAgICAgICBE
Rkc6OmVuc3VyZVdvcmtsaXN0Rm9ySW5kZXgoaSkuc3VzcGVuZEFsbFRocmVhZHMoKTsKQEAgLTIz
NjUsNyArMjM2NSw3IEBAIHZvaWQgSGVhcDo6ZGlkRmluaXNoQ29sbGVjdGlvbigpCiB2b2lkIEhl
YXA6OnJlc3VtZUNvbXBpbGVyVGhyZWFkcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
aWYgKCFWTTo6Y2FuVXNlSklUKCkpCisgICAgaWYgKCFPcHRpb25zOjp1c2VKSVQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMo
KTsgaS0tOykKICAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkucmVzdW1l
QWxsVGhyZWFkcygpOwpAQCAtMjcxNSw3ICsyNzE1LDcgQEAgdm9pZCBIZWFwOjphZGRDb3JlQ29u
c3RyYWludHMoKQogICAgICAgICAgICAgICAgIFNldFJvb3RNYXJrUmVhc29uU2NvcGUgcm9vdFNj
b3BlKHNsb3RWaXNpdG9yLCBTbG90VmlzaXRvcjo6Um9vdE1hcmtSZWFzb246OkNvbnNlcnZhdGl2
ZVNjYW4pOwogICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZChjb25zZXJ2YXRpdmVS
b290cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7
CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBKSVRTdHViUm91dGluZXMgbXVzdCBiZSB2aXNpdGVkIGFmdGVyIHNjYW5uaW5nIENvbnNlcnZh
dGl2ZVJvb3RzIHNpbmNlIEpJVFN0dWJSb3V0aW5lcyBkZXBlbmQgb24gdGhlIGhvb2sgZXhlY3V0
ZWQgZHVyaW5nIGdhdGhlcmluZyBDb25zZXJ2YXRpdmVSb290cy4KICAgICAgICAgICAgICAgICBT
ZXRSb290TWFya1JlYXNvblNjb3BlIHJvb3RTY29wZShzbG90VmlzaXRvciwgU2xvdFZpc2l0b3I6
OlJvb3RNYXJrUmVhc29uOjpKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgICAgIG1faml0
U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhzbG90VmlzaXRvcik7CkBAIC0y
ODIzLDcgKzI4MjMsNyBAQCB2b2lkIEhlYXA6OmFkZENvcmVDb25zdHJhaW50cygpCiAgICAgICAg
IENvbnN0cmFpbnRQYXJhbGxlbGlzbTo6UGFyYWxsZWwpOwogICAgIAogI2lmIEVOQUJMRShERkdf
SklUKQotICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKKyAgICBpZiAoT3B0aW9uczo6dXNlSklU
KCkpIHsKICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5hZGQoCiAgICAgICAgICAgICAiRHciLCAi
REZHIFdvcmtsaXN0cyIsCiAgICAgICAgICAgICBbdGhpc10gKFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Fic3RyYWN0
UEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9B
YnN0cmFjdFBDLmNwcAkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAg
QWJzdHJhY3RQQzo6QWJzdHJhY3RQQyhWTSYgdm0sIENhbGxGcmFtZQogICAgIFVOVVNFRF9QQVJB
TShjYWxsRnJhbWUpOwogICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKFZNOjpjYW5Vc2VK
SVQoKSkgeworICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBtX3BvaW50ZXIg
PSBjYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgbV9tb2RlID0gSklUOwog
ICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5r
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3Mu
Y3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05MiwzNyArOTIsMzcgQEAgaW5saW5lIGJvb2wg
SklUVGh1bmtzOjpXZWFrTmF0aXZlRXhlY3V0YQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZlQ2FsbChWTSYgdm0pCiB7Ci0gICAgQVNT
RVJUKFZNOjpjYW5Vc2VKSVQoKSk7CisgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAg
ICByZXR1cm4gY3RpU3R1Yih2bSwgbmF0aXZlQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpTmF0aXZl
Q29uc3RydWN0KFZNJiB2bSkKIHsKLSAgICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKKyAgICBB
U1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVD
b25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJ
VFRodW5rUHRyVGFnPiBKSVRUaHVua3M6OmN0aU5hdGl2ZVRhaWxDYWxsKFZNJiB2bSkKIHsKLSAg
ICBBU1NFUlQoVk06OmNhblVzZUpJVCgpKTsKKyAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkp
OwogICAgIHJldHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcikuY29kZSgp
OwogfQogCiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6
Y3RpTmF0aXZlVGFpbENhbGxXaXRob3V0U2F2ZWRUYWdzKFZNJiB2bSkKIHsKLSAgICBBU1NFUlQo
Vk06OmNhblVzZUpJVCgpKTsKKyAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJl
dHVybiBjdGlTdHViKHZtLCBuYXRpdmVUYWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3NHZW5lcmF0b3Ip
LmNvZGUoKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiBKSVRU
aHVua3M6OmN0aUludGVybmFsRnVuY3Rpb25DYWxsKFZNJiB2bSkKIHsKLSAgICBBU1NFUlQoVk06
OmNhblVzZUpJVCgpKTsKKyAgICBBU1NFUlQoT3B0aW9uczo6dXNlSklUKCkpOwogICAgIHJldHVy
biBjdGlTdHViKHZtLCBpbnRlcm5hbEZ1bmN0aW9uQ2FsbEdlbmVyYXRvcikuY29kZSgpOwogfQog
CiBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+IEpJVFRodW5rczo6Y3RpSW50
ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdChWTSYgdm0pCiB7Ci0gICAgQVNTRVJUKFZNOjpjYW5Vc2VK
SVQoKSk7CisgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUpJVCgpKTsKICAgICByZXR1cm4gY3RpU3R1
Yih2bSwgaW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcikuY29kZSgpOwogfQogCkBA
IC0xODMsNyArMTgzLDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
bwogTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpb25TdHViKFZNJiB2bSwg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0
cnVjdG9yLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNv
bnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
ICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7ICAgIAotICAgIEFTU0VSVChWTTo6
Y2FuVXNlSklUKCkpOworICAgIEFTU0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAKICAgICBhdXRv
IGhvc3RGdW5jdGlvbktleSA9IHN0ZDo6bWFrZV90dXBsZShmdW5jdGlvbiwgY29uc3RydWN0b3Is
IG5hbWUpOwogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVu
dHJ5cG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludEVudHJ5cG9pbnQuY3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDcg
KzQwLDcgQEAgc3RhdGljIHZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KENvZGVCbAogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Cisg
ICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7CiAgICAgICAgICAgICBzdGF0aWMgRGlyZWN0SklUQ29kZSogaml0Q29kZTsKICAgICAg
ICAgICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwpAQCAtODgsNyArODgsNyBAQCBz
dGF0aWMgdm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoQ29kZUJsCiBzdGF0aWMgdm9pZCBzZXRF
dmFsRW50cnlwb2ludChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQot
ICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsK
ICAgICAgICAgc3RhdGljIE5hdGl2ZUpJVENvZGUqIGppdENvZGU7CiAgICAgICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlS2V5OwogICAgICAgICBzdGQ6OmNhbGxfb25jZShvbmNlS2V5LCBb
Jl0gewpAQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KENv
ZGVCbG9jayoKIHN0YXRpYyB2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewor
ICAgIGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBzdGF0aWMgTmF0aXZlSklUQ29k
ZSogaml0Q29kZTsKICAgICAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VLZXk7CiAgICAg
ICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VLZXksIFsmXSB7CkBAIC0xMzQsNyArMTM0LDcgQEAgc3Rh
dGljIHZvaWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoQ29kZUJsbwogc3RhdGljIHZvaWQgc2V0TW9k
dWxlUHJvZ3JhbUVudHJ5cG9pbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAjaWYgRU5BQkxF
KEpJVCkKLSAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKSB7CiAgICAgICAgIHN0YXRpYyBOYXRpdmVKSVRDb2RlKiBqaXRDb2RlOwogICAgICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUtleTsKICAgICAgICAgc3RkOjpjYWxsX29uY2Uob25j
ZUtleSwgWyZdIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1NywxNCArMzU3
LDE0IEBAIGlubGluZSBib29sIHNob3VsZEpJVChDb2RlQmxvY2sqIGNvZGVCbG8KICAgICAgICAg
fHwgIWVuc3VyZUdsb2JhbEpJVEFsbG93bGlzdCgpLmNvbnRhaW5zKGNvZGVCbG9jaykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBWTTo6Y2FuVXNlSklUKCkgJiYgT3B0aW9u
czo6dXNlQmFzZWxpbmVKSVQoKTsKKyAgICByZXR1cm4gT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQo
KTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQnl0ZWNvZGVJbmRleCBsb29wT1NSRW50cnlCeXRlY29kZUluZGV4ID0gQnl0ZWNvZGVJ
bmRleCgwKSkKIHsKICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7IC8vIE15
IGNhbGxlcnMgZG9uJ3Qgc2V0IHRvcCBjYWxsZnJhbWUsIHNvIHdlIGRvbid0IHdhbnQgdG8gR0Mg
aGVyZSBhdCBhbGwuCi0gICAgQVNTRVJUKFZNOjpjYW5Vc2VKSVQoKSk7CisgICAgQVNTRVJUKE9w
dGlvbnM6OnVzZUpJVCgpKTsKICAgICAKICAgICBjb2RlQmxvY2stPnVwZGF0ZUFsbFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25zKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lvbiAyNjMwNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsMTMgKzYzLDE2IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpCiAjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgICAgICBXcml0ZUJh
cnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCi0KLSAgICAgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZSgpOwotICAgICAgICBWTTo6Y29tcHV0ZUNhblVzZUpJVCgp
OwotICAgICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkgewotICAgICAgICAgICAgT3B0aW9uczo6
dXNlSklUKCkgPSBmYWxzZTsKLSAgICAgICAgICAgIE9wdGlvbnM6OnJlY29tcHV0ZURlcGVuZGVu
dE9wdGlvbnMoKTsKKyAgICAgICAgeworICAgICAgICAgICAgT3B0aW9uczo6QWxsb3dVbmZpbmFs
aXplZEFjY2Vzc1Njb3BlIHNjb3BlOworICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
aW5pdGlhbGl6ZSgpOworICAgICAgICAgICAgVk06OmNvbXB1dGVDYW5Vc2VKSVQoKTsKKyAgICAg
ICAgICAgIGlmICghZ19qc2NDb25maWcudm0uY2FuVXNlSklUKSB7CisgICAgICAgICAgICAgICAg
T3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBPcHRpb25zOjpyZWNv
bXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAg
ICAgT3B0aW9uczo6ZmluYWxpemUoKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dXNlU2lnaWxs
Q3Jhc2hBbmFseXplcigpKQogICAgICAgICAgICAgZW5hYmxlU2lnaWxsQ3Jhc2hBbmFseXplcigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDQ29uZmlnLmgJKHJldmlz
aW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0NvbmZpZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMyBAQCBzdHJ1Y3QgQ29uZmlnIHsKICAgICAv
LyBUaGUgZm9sbG93aW5nIEhhc0JlZW5DYWxsZWQgZmxhZ3MgYXJlIGZvciBhdWRpdGluZyBjYWxs
X29uY2UgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgogICAgIGJvb2wgaW5pdGlhbGl6ZVRocmVh
ZGluZ0hhc0JlZW5DYWxsZWQ7CiAKKyAgICBzdHJ1Y3QgeworI2lmIEFTU0VSVF9FTkFCTEVECisg
ICAgICAgIGJvb2wgY2FuVXNlSklUSXNTZXQ7CisjZW5kaWYKKyAgICAgICAgYm9vbCBjYW5Vc2VK
SVQ7CisgICAgfSB2bTsKKwogICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IqIGV4ZWN1dGFibGVBbGxv
Y2F0b3I7CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBmaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgdm9pZCogc3RhcnRFeGVjdXRhYmxlTWVtb3J5OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJs
b28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMzQ5LDcgKzEzNDksNyBAQCBjYXBpdGFsTmFt
ZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjCiAgICAgfQogCiAgICAgLy8gVW5mb3J0dW5h
dGVseSwgdGhlIHByb3RvdHlwZSBvYmplY3RzIG9mIHRoZSBidWlsdGluIG9iamVjdHMgY2FuIGJl
IHRvdWNoZWQgZnJvbSBjb25jdXJyZW50IGNvbXBpbGVycy4gU28gZWFnZXJseSBpbml0aWFsaXpl
IHRoZW0gb25seSBpZiB3ZSB1c2UgSklULgotICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKKyAg
ICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgdGhpcy0+Ym9vbGVhblByb3RvdHlw
ZSgpOwogICAgICAgICB0aGlzLT5udW1iZXJQcm90b3R5cGUoKTsKICAgICAgICAgdGhpcy0+c3lt
Ym9sUHJvdG90eXBlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw3ICs0
NjQsNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgYXJyYXlKb2luV2F0Y2hw
b2ludFNldCgpIHsgcmV0dXJuIG1fYXJyYXlKb2luV2F0Y2hwb2ludFNldDsgfQogICAgIElubGlu
ZVdhdGNocG9pbnRTZXQmIG51bWJlclRvU3RyaW5nV2F0Y2hwb2ludFNldCgpCiAgICAgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChWTTo6Y2FuVXNlSklUKCkpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChPcHRpb25zOjp1c2VKSVQoKSk7CiAgICAgICAgIHJldHVybiBtX251bWJlclRvU3RyaW5n
V2F0Y2hwb2ludFNldDsKICAgICB9CiAgICAgLy8gSWYgdGhpcyBoYXNuJ3QgYmVlbiBpbnZhbGlk
YXRlZCwgaXQgbWVhbnMgdGhlIGFycmF5IGl0ZXJhdG9yIHByb3RvY29sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjYzMDY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxOSw3ICsyMTksNyBAQCBzdGF0aWMgaW50MzJfdCBjb21wdXRlUHJpb3JpdHlEZWx0YU9m
V29yCiAgICAgcmV0dXJuIG11bHRpQ29yZVByaW9yaXR5RGVsdGE7CiB9CiAKLXN0YXRpYyBib29s
IGppdEVuYWJsZWRCeURlZmF1bHQoKQorc3RhdGljIGNvbnN0ZXhwciBib29sIGppdEVuYWJsZWRC
eURlZmF1bHQoKQogewogICAgIHJldHVybiBpczMyQml0KCkgfHwgaXNBZGRyZXNzNjRCaXQoKTsK
IH0KQEAgLTM4Miw2ICszODIsOCBAQCBzdGF0aWMgdm9pZCBkaXNhYmxlQWxsSklUT3B0aW9ucygp
CiAgICAgT3B0aW9uczo6dXNlQmFzZWxpbmVKSVQoKSA9IGZhbHNlOwogICAgIE9wdGlvbnM6OnVz
ZURGR0pJVCgpID0gZmFsc2U7CiAgICAgT3B0aW9uczo6dXNlRlRMSklUKCkgPSBmYWxzZTsKKyAg
ICBPcHRpb25zOjp1c2VCQlFKSVQoKSA9IGZhbHNlOworICAgIE9wdGlvbnM6OnVzZU9NR0pJVCgp
ID0gZmFsc2U7CiAgICAgT3B0aW9uczo6dXNlRE9NSklUKCkgPSBmYWxzZTsKICAgICBPcHRpb25z
Ojp1c2VSZWdFeHBKSVQoKSA9IGZhbHNlOwogfQpAQCAtNTY3LDYgKzU2OSw4IEBAIHZvaWQgT3B0
aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgc3RkOjpjYWxsX29uY2UoCiAgICAgICAgIGluaXRpYWxp
emVPcHRpb25zT25jZUZsYWcsCiAgICAgICAgIFtdIHsKKyAgICAgICAgICAgIEFsbG93VW5maW5h
bGl6ZWRBY2Nlc3NTY29wZSBzY29wZTsKKwogICAgICAgICAgICAgLy8gU2FuaXR5IGNoZWNrIHRo
YXQgb3B0aW9ucyBhZGRyZXNzIGNvbXB1dGF0aW9uIGlzIHdvcmtpbmcuCiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChPcHRpb25zOjphZGRyZXNzT2ZPcHRpb24odXNlS2VyblRDU01JRCkgPT0g
ICZPcHRpb25zOjp1c2VLZXJuVENTTSgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE9w
dGlvbnM6OmFkZHJlc3NPZk9wdGlvbkRlZmF1bHQodXNlS2VyblRDU01JRCkgPT0gICZPcHRpb25z
Ojp1c2VLZXJuVENTTURlZmF1bHQoKSk7CkBAIC02MzEsOSArNjM1LDYgQEAgdm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKICAgICAgICAgICAgIEFTU0VSVChPcHRpb25zOjp0aHJlc2hvbGRGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKCkgPj0gMCk7CiAgICAgICAgICAgICBBU1NFUlQoT3B0aW9uczo6
Y3JpdGljYWxHQ01lbW9yeVRocmVzaG9sZCgpID4gMC4wICYmIE9wdGlvbnM6OmNyaXRpY2FsR0NN
ZW1vcnlUaHJlc2hvbGQoKSA8IDEuMCk7CiAKLSAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKLSAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOwotCiAjaWYgSEFW
RShNQUNIX0VYQ0VQVElPTlMpCiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4
Y2VwdGlvbnMoKSkKICAgICAgICAgICAgICAgICBoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKQEAg
LTY2Myw3ICs2NjQsMTIgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKICAgICAgICAgICAg
IE9wdGlvbnM6OmR1bXBaYXBwZWRDZWxsQ3Jhc2hEYXRhKCkgPQogICAgICAgICAgICAgICAgICho
d1BoeXNpY2FsQ1BVTWF4KCkgPj0gNCkgJiYgKGh3TDNDYWNoZVNpemUoKSA+PSBzdGF0aWNfY2Fz
dDxpbnQ2NF90Pig2ICogTUIpKTsKICNlbmRpZgotICAgICAgICB9KTsKKworICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBzaG91bGQgb25seSBiZSBkb25lIGF0IHRoZSBlbmQgYWZ0ZXIgYWxs
IG9wdGlvbnMKKyAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KKyAgICAgICAg
ICAgIGR1bXBPcHRpb25zSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVD
b2hlcmVudCgpOworICAgIH0pOwogfQogCiB2b2lkIE9wdGlvbnM6OmR1bXBPcHRpb25zSWZOZWVk
ZWQoKQpAQCAtNjk0LDYgKzcwMCwxMiBAQCB2b2lkIE9wdGlvbnM6OmR1bXBPcHRpb25zSWZOZWVk
ZWQoKQogICAgIH0KIH0KIAordm9pZCBPcHRpb25zOjpmaW5hbGl6ZSgpCit7CisgICAgQVNTRVJU
KCFnX2pzY0NvbmZpZy5vcHRpb25zLmFsbG93VW5maW5hbGl6ZWRBY2Nlc3MpOworICAgIGdfanNj
Q29uZmlnLm9wdGlvbnMuaXNGaW5hbGl6ZWQgPSB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBpc1Nl
cGFyYXRvcihjaGFyIGMpCiB7CiAgICAgcmV0dXJuIGlzQVNDSUlTcGFjZShjKSB8fCAoYyA9PSAn
LCcpOwpAQCAtNzAxLDYgKzcxMyw3IEBAIHN0YXRpYyBib29sIGlzU2VwYXJhdG9yKGNoYXIgYykK
IAogYm9vbCBPcHRpb25zOjpzZXRPcHRpb25zKGNvbnN0IGNoYXIqIG9wdGlvbnNTdHIpCiB7Cisg
ICAgQWxsb3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlIHNjb3BlOwogICAgIFJFTEVBU0VfQVNTRVJU
KCFnX2pzY0NvbmZpZy5pc1Blcm1hbmVudGx5RnJvemVuKCkpOwogICAgIFZlY3RvcjxjaGFyKj4g
b3B0aW9uczsKIApAQCAtODY2LDYgKzg3OSw3IEBAIGJvb2wgT3B0aW9uczo6c2V0QWxpYXNlZE9w
dGlvbihjb25zdCBjaGEKIAogYm9vbCBPcHRpb25zOjpzZXRPcHRpb24oY29uc3QgY2hhciogYXJn
KQogeworICAgIEFsbG93VW5maW5hbGl6ZWRBY2Nlc3NTY29wZSBzY29wZTsKICAgICBib29sIHN1
Y2Nlc3MgPSBzZXRPcHRpb25XaXRob3V0QWxpYXMoYXJnKTsKICAgICBpZiAoc3VjY2VzcykKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC04NzYsNiArODkwLDcgQEAgYm9vbCBPcHRpb25zOjpzZXRP
cHRpb24oY29uc3QgY2hhciogYXJnKQogdm9pZCBPcHRpb25zOjpkdW1wQWxsT3B0aW9ucyhTdHJp
bmdCdWlsZGVyJiBidWlsZGVyLCBEdW1wTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIHRpdGxlLAog
ICAgIGNvbnN0IGNoYXIqIHNlcGFyYXRvciwgY29uc3QgY2hhciogb3B0aW9uSGVhZGVyLCBjb25z
dCBjaGFyKiBvcHRpb25Gb290ZXIsIER1bXBEZWZhdWx0c09wdGlvbiBkdW1wRGVmYXVsdHNPcHRp
b24pCiB7CisgICAgQWxsb3dVbmZpbmFsaXplZEFjY2Vzc1Njb3BlIHNjb3BlOwogICAgIGlmICh0
aXRsZSkgewogICAgICAgICBidWlsZGVyLmFwcGVuZCh0aXRsZSk7CiAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCdcbicpOwpAQCAtOTc4LDYgKzk5Myw3IEBAIHZvaWQgT3B0aW9uczo6ZHVtcE9wdGlv
bihTdHJpbmdCdWlsZGVyJiAKIAogdm9pZCBPcHRpb25zOjplbnN1cmVPcHRpb25zQXJlQ29oZXJl
bnQoKQogeworICAgIEFsbG93VW5maW5hbGl6ZWRBY2Nlc3NTY29wZSBzY29wZTsKICAgICBib29s
IGNvaGVyZW50ID0gdHJ1ZTsKICAgICBpZiAoISh1c2VMTEludCgpIHx8IHVzZUpJVCgpKSkgewog
ICAgICAgICBjb2hlcmVudCA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5j
bHVkZSAiSlNFeHBvcnRNYWNyb3MuaCIKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHd0Zi9Gb3JiaWRIZWFwQWxsb2NhdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtNzMsNyArNzUsMzUgQEAgcHVibGljOgogICAg
ICAgICBHQ0xvZ0xldmVsLAogICAgIH07CiAKKyAgICBjbGFzcyBBbGxvd1VuZmluYWxpemVkQWNj
ZXNzU2NvcGUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbGxvd1VuZmluYWxpemVk
QWNjZXNzU2NvcGUpOworICAgICAgICBXVEZfRk9SQklEX0hFQVBfQUxMT0NBVElPTjsKKyAgICBw
dWJsaWM6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgQWxsb3dVbmZpbmFsaXplZEFjY2Vz
c1Njb3BlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnX2pzY0NvbmZpZy5vcHRpb25z
LmlzRmluYWxpemVkKSB7CisgICAgICAgICAgICAgICAgbV9zYXZlZEFsbG93VW5maW5hbGl6ZWRV
c2UgPSBnX2pzY0NvbmZpZy5vcHRpb25zLmFsbG93VW5maW5hbGl6ZWRBY2Nlc3M7CisgICAgICAg
ICAgICAgICAgZ19qc2NDb25maWcub3B0aW9ucy5hbGxvd1VuZmluYWxpemVkQWNjZXNzID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIH5BbGxvd1VuZmluYWxpemVk
QWNjZXNzU2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdfanNjQ29uZmlnLm9w
dGlvbnMuaXNGaW5hbGl6ZWQpCisgICAgICAgICAgICAgICAgZ19qc2NDb25maWcub3B0aW9ucy5h
bGxvd1VuZmluYWxpemVkQWNjZXNzID0gbV9zYXZlZEFsbG93VW5maW5hbGl6ZWRVc2U7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9zYXZlZEFsbG93VW5maW5hbGl6
ZWRVc2U7CisjZWxzZQorICAgICAgICBBTFdBWVNfSU5MSU5FIEFsbG93VW5maW5hbGl6ZWRBY2Nl
c3NTY29wZSgpID0gZGVmYXVsdDsKKyAgICAgICAgQUxXQVlTX0lOTElORSB+QWxsb3dVbmZpbmFs
aXplZEFjY2Vzc1Njb3BlKCkgeyB9CisjZW5kaWYKKyAgICB9OworCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHN0YXRpYyB2b2lkIGZpbmFsaXpl
KCk7CiAKICAgICAvLyBQYXJzZXMgYSBzdHJpbmcgb2Ygb3B0aW9ucyB3aGVyZSBlYWNoIG9wdGlv
biBpcyBvZiB0aGUgZm9ybWF0ICItLTxvcHRpb25OYW1lPj08dmFsdWU+IgogICAgIC8vIGFuZCBh
cmUgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuIFRoZSBsZWFkaW5nICItLSIgaXMgb3B0aW9uYWwgYW5k
IHdpbGwgYmUgaWdub3JlZC4KQEAgLTkwLDggKzEyMCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOwogCiAjZGVmaW5lIERFQ0xBUkVfT1BU
SU9OX0FDQ0VTU09SUyh0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8sIGF2YWlsYWJpbGl0eV8s
IGRlc2NyaXB0aW9uXykgXAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wdGlvbnNTdG9yYWdl
Ojp0eXBlXyYgbmFtZV8oKSB7IHJldHVybiBnX2pzY0NvbmZpZy5vcHRpb25zLm5hbWVfOyB9ICBc
Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgT3B0aW9uc1N0b3JhZ2U6OnR5cGVfJiBuYW1lXyMj
RGVmYXVsdCgpIHsgcmV0dXJuIGdfanNjQ29uZmlnLm9wdGlvbnMubmFtZV8jI0RlZmF1bHQ7IH0K
K3ByaXZhdGU6IFwKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBPcHRpb25zU3RvcmFnZTo6dHlw
ZV8mIG5hbWVfIyNEZWZhdWx0KCkgeyByZXR1cm4gZ19qc2NDb25maWcub3B0aW9ucy5uYW1lXyMj
RGVmYXVsdDsgfSBcCitwdWJsaWM6IFwKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBPcHRpb25z
U3RvcmFnZTo6dHlwZV8mIG5hbWVfKCkgXAorICAgIHsgXAorICAgICAgICBBU1NFUlQoZ19qc2ND
b25maWcub3B0aW9ucy5hbGxvd1VuZmluYWxpemVkQWNjZXNzIHx8IGdfanNjQ29uZmlnLm9wdGlv
bnMuaXNGaW5hbGl6ZWQpOyBcCisgICAgICAgIHJldHVybiBnX2pzY0NvbmZpZy5vcHRpb25zLm5h
bWVfOyBcCisgICAgfQogCiAgICAgRk9SX0VBQ0hfSlNDX09QVElPTihERUNMQVJFX09QVElPTl9B
Q0NFU1NPUlMpCiAjdW5kZWYgREVDTEFSRV9PUFRJT05fQUNDRVNTT1JTCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI2MzA2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxOCw2ICs2MTgsOSBAQCBzdHJ1Y3QgT3B0aW9uc1N0b3JhZ2UgewogICAgIHVz
aW5nIE9wdGlvblN0cmluZyA9IGNvbnN0IGNoYXIqOwogICAgIHVzaW5nIEdDTG9nTGV2ZWwgPSBH
Q0xvZ2dpbmc6OkxldmVsOwogCisgICAgYm9vbCBhbGxvd1VuZmluYWxpemVkQWNjZXNzOworICAg
IGJvb2wgaXNGaW5hbGl6ZWQ7CisKICNkZWZpbmUgREVDTEFSRV9PUFRJT04odHlwZV8sIG5hbWVf
LCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxpdHlfLCBkZXNjcmlwdGlvbl8pIFwKICAgICB0eXBl
XyBuYW1lXzsgXAogICAgIHR5cGVfIG5hbWVfIyNEZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSwgMjAwNCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIDIw
MDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBW
YXJnYSAocHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpA
QCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFy
ckMKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgaWYgKCFwYXR0ZXJuLmNvbnRh
aW5zVW5zaWduZWRMZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZUpJVCgpICYmIE9wdGlvbnM6
OnVzZVJlZ0V4cEpJVCgpCisgICAgaWYgKCFwYXR0ZXJuLmNvbnRhaW5zVW5zaWduZWRMZW5ndGhQ
YXR0ZXJuKCkgJiYgT3B0aW9uczo6dXNlUmVnRXhwSklUKCkKICNpZiAhRU5BQkxFKFlBUlJfSklU
X0JBQ0tSRUZFUkVOQ0VTKQogICAgICAgICAmJiAhcGF0dGVybi5tX2NvbnRhaW5zQmFja3JlZmVy
ZW5jZXMKICNlbmRpZgpAQCAtMzIwLDcgKzMyMCw3IEBAIHZvaWQgUmVnRXhwOjpjb21waWxlTWF0
Y2hPbmx5KFZNKiB2bSwgWWEKICAgICB9CiAKICNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgaWYg
KCFwYXR0ZXJuLmNvbnRhaW5zVW5zaWduZWRMZW5ndGhQYXR0ZXJuKCkgJiYgVk06OmNhblVzZUpJ
VCgpICYmIE9wdGlvbnM6OnVzZVJlZ0V4cEpJVCgpCisgICAgaWYgKCFwYXR0ZXJuLmNvbnRhaW5z
VW5zaWduZWRMZW5ndGhQYXR0ZXJuKCkgJiYgT3B0aW9uczo6dXNlUmVnRXhwSklUKCkKICNpZiAh
RU5BQkxFKFlBUlJfSklUX0JBQ0tSRUZFUkVOQ0VTKQogICAgICAgICAmJiAhcGF0dGVybi5tX2Nv
bnRhaW5zQmFja3JlZmVyZW5jZXMKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEs
NyArMjMxLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNXYXRjaGFibGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIChtX2JpdHMgJiBLaW5kQml0c01hc2spID09IFNjb3BlS2lu
ZEJpdHMgJiYgVk06OmNhblVzZUpJVCgpOworICAgICAgICByZXR1cm4gKG1fYml0cyAmIEtpbmRC
aXRzTWFzaykgPT0gU2NvcGVLaW5kQml0cyAmJiBPcHRpb25zOjp1c2VKSVQoKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gQXNzZXJ0cyBpZiB0aGUgb2Zmc2V0IGlzIGFueXRoaW5nIGJ1dCBhIHNjb3Bl
IG9mZnNldC4gVGhpcyBzdHJ1Y3R1cmVzIHRoZSBhc3NlcnRpb25zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMyArMTk2LDYg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBFTkFCTEUoSklUKQotI2lmIEFTU0VSVF9FTkFC
TEVECi1ib29sIFZNOjpzX2NhblVzZUpJVElzU2V0ID0gZmFsc2U7Ci0jZW5kaWYKLWJvb2wgVk06
OnNfY2FuVXNlSklUID0gZmFsc2U7Ci0jZW5kaWYKLQogQXRvbWljPHVuc2lnbmVkPiBWTTo6c19u
dW1iZXJPZklEczsKIAogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihWTSk7
CkBAIC0yNTAsMTAgKzI0MywxMCBAQCB2b2lkIFZNOjpjb21wdXRlQ2FuVXNlSklUKCkKIHsKICNp
ZiBFTkFCTEUoSklUKQogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgUkVMRUFTRV9BU1NFUlQoIXNf
Y2FuVXNlSklUSXNTZXQpOwotICAgIHNfY2FuVXNlSklUSXNTZXQgPSB0cnVlOworICAgIFJFTEVB
U0VfQVNTRVJUKCFnX2pzY0NvbmZpZy52bS5jYW5Vc2VKSVRJc1NldCk7CisgICAgZ19qc2NDb25m
aWcudm0uY2FuVXNlSklUSXNTZXQgPSB0cnVlOwogI2VuZGlmCi0gICAgc19jYW5Vc2VKSVQgPSBW
TTo6Y2FuVXNlQXNzZW1ibGVyKCkgJiYgT3B0aW9uczo6dXNlSklUKCk7CisgICAgZ19qc2NDb25m
aWcudm0uY2FuVXNlSklUID0gVk06OmNhblVzZUFzc2VtYmxlcigpICYmIE9wdGlvbnM6OnVzZUpJ
VCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ2Nyw3ICs0NjAsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlw
ZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZXhlY3V0YWJsZVRvQ29kZUJsb2NrRWRnZVN0cnVj
dHVyZS5zZXQoKnRoaXMsIEV4ZWN1dGFibGVUb0NvZGVCbG9ja0VkZ2U6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgbnVsbHB0ciwganNOdWxsKCkpKTsKIAogICAgIC8vIEVhZ2VybHkgaW5pdGlhbGl6
ZSBjb25zdGFudCBjZWxscyBzaW5jZSB0aGUgY29uY3VycmVudCBjb21waWxlciBjYW4gYWNjZXNz
IHRoZW0uCi0gICAgaWYgKGNhblVzZUpJVCgpKSB7CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJVCgp
KSB7CiAgICAgICAgIHNlbnRpbmVsTWFwQnVja2V0KCk7CiAgICAgICAgIHNlbnRpbmVsU2V0QnVj
a2V0KCk7CiAgICAgfQpAQCAtNTQ3LDcgKzU0MCw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBI
ZWFwVHlwZSBoZWFwVHlwZSkKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgYW55IHN0dWJzIHRoYXQgdGhlIEpJVCBpcyBnb2luZyB0byB1c2UgYXJlIGluaXRpYWxpemVk
IGluIG5vbi1jb21waWxhdGlvbiB0aHJlYWRzLgotICAgIGlmIChjYW5Vc2VKSVQoKSkgeworICAg
IGlmIChPcHRpb25zOjp1c2VKSVQoKSkgewogICAgICAgICBqaXRTdHVicyA9IG1ha2VVbmlxdWU8
SklUVGh1bmtzPigpOwogI2lmIEVOQUJMRShGVExfSklUKQogICAgICAgICBmdGxUaHVua3MgPSBt
YWtlVW5pcXVlPEZUTDo6VGh1bmtzPigpOwpAQCAtNzk3LDcgKzc5MCw3IEBAIHN0YXRpYyBSZWY8
TmF0aXZlSklUQ29kZT4gaml0Q29kZUZvckNvbnMKIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRI
b3N0RnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEludHJpbnNpYyBpbnRyaW5zaWMs
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2ln
bmF0dXJlLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAo
Y2FuVXNlSklUKCkpIHsKKyAgICBpZiAoT3B0aW9uczo6dXNlSklUKCkpIHsKICAgICAgICAgcmV0
dXJuIGppdFN0dWJzLT5ob3N0RnVuY3Rpb25TdHViKAogICAgICAgICAgICAgKnRoaXMsIGZ1bmN0
aW9uLCBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIGludHJpbnNpYyAhPSBOb0ludHJpbnNpYyA/
IHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKGludHJpbnNpYykgOiBudWxscHRyLApAQCAtODM3
LDcgKzgzMCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIFZNOjpnZXRCb3VuZEZ1bmN0aW9uKGIKIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBWTTo6Z2V0Q1RJSW50ZXJuYWxGdW5j
dGlvblRyYW1wb2xpbmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKGNhblVzZUpJVCgpKSB7CisgICAgaWYgKE9wdGlvbnM6OnVzZUpJ
VCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICAgICAgcmV0
dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0aW9uQ2FsbCgqdGhpcykucmV0YWdnZWQ8SlNF
bnRyeVB0clRhZz4oKTsKICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RydWN0KCp0aGlzKS5yZXRhZ2dlZDxKU0VudHJ5UHRyVGFnPigpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODksNyArNzg5LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSBib29sIGNhblVzZUFzc2Vt
YmxlcigpOwogICAgIHN0YXRpYyBib29sIGlzSW5NaW5pTW9kZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gIWNhblVzZUpJVCgpIHx8IE9wdGlvbnM6OmZvcmNlTWluaVZNTW9kZSgpOworICAgICAg
ICByZXR1cm4gIU9wdGlvbnM6OnVzZUpJVCgpIHx8IE9wdGlvbnM6OmZvcmNlTWluaVZNTW9kZSgp
OwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIHVzZVVubGlua2VkQ29kZUJsb2NrSmV0dGlzb25p
bmcoKQpAQCAtNzk4LDE1ICs3OTgsNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIHZv
aWQgY29tcHV0ZUNhblVzZUpJVCgpOwotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgY2Fu
VXNlSklUKCkKLSAgICB7Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgQVNTRVJUKHNfY2FuVXNl
SklUSXNTZXQpOwotICAgICAgICByZXR1cm4gc19jYW5Vc2VKSVQ7Ci0jZWxzZQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLSAgICB9CiAKICAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBh
ZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKik7CiAgICAgdm9pZCBjbGVhclNv
dXJjZVByb3ZpZGVyQ2FjaGVzKCk7CkBAIC0xMjMzLDEzICsxMjI0LDYgQEAgcHJpdmF0ZToKICAg
ICBXVEY6OkZ1bmN0aW9uPHZvaWQoVk0mKT4gbV9vbkVhY2hNaWNyb3Rhc2tUaWNrOwogICAgIHVp
bnRwdHJfdCBtX2N1cnJlbnRXZWFrUmVmVmVyc2lvbiB7IDAgfTsKIAotI2lmIEVOQUJMRShKSVQp
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBz
X2NhblVzZUpJVElzU2V0OwotI2VuZGlmCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJv
b2wgc19jYW5Vc2VKSVQ7Ci0jZW5kaWYKLQogICAgIFZNKiBtX3ByZXY7IC8vIFJlcXVpcmVkIGJ5
IERvdWJseUxpbmtlZExpc3ROb2RlLgogICAgIFZNKiBtX25leHQ7IC8vIFJlcXVpcmVkIGJ5IERv
dWJseUxpbmtlZExpc3ROb2RlLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUNhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgV2FzbSB7CiAKIGlubGluZSBib29sIGlzU3VwcG9ydGVkKCkKIHsKLSAg
ICByZXR1cm4gVk06OmNhblVzZUpJVCgpICYmIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCk7Cisg
ICAgcmV0dXJuIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw4ICsyMzIsNiBA
QCBzdGF0aWMgdm9pZCBkb09TUkVudHJ5KEluc3RhbmNlKiBpbnN0YW5jCiAKIGlubGluZSBib29s
IHNob3VsZEpJVCh1bnNpZ25lZCBmdW5jdGlvbkluZGV4KQogewotICAgIGlmICghVk06OmNhblVz
ZUpJVCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFPcHRpb25zOjp1c2VPTUdK
SVQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghT3B0aW9uczo6d2FzbUZ1bmN0
aW9uSW5kZXhSYW5nZVRvQ29tcGlsZSgpLmlzSW5SYW5nZShmdW5jdGlvbkluZGV4KSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwCShyZXZpc2lv
biAyNjMwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtU2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksNiBAQCBlbnVtIGNsYXNzIFJlcXVpcmVkV2Fz
bUpJVCB7IEFueSwgT01HIH07CiAKIGlubGluZSBib29sIHNob3VsZEpJVChXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jayogY29kZUJsb2NrLCBSZXF1aXJlZFdhc21KSVQgcmVxdWlyZWRKSVQgPSBSZXF1
aXJlZFdhc21KSVQ6OkFueSkKIHsKLSAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChyZXF1aXJlZEpJVCA9PSBSZXF1aXJlZFdhc21KSVQ6Ok9N
RykgewogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZU9NR0pJVCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMDY5KQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYt
MTYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgT3B0aW9u
czo6dXNlSklUKCkgYmUgdGhlIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdHJ1dGggb24gd2hldGhlciB3
ZSBzaG91bGQgdXNlIHRoZSBKSVQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTI1NTYKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzgwNDM2Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6Y29tcGlsZVNlbGVjdG9yKToKKwogMjAyMC0wNi0xNSAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBKSVQgdGh1bmtzIHNob3VsZCB3b3JrIG9uIGFy
bTY0XzMyCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiAyNjMwNjkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21w
aWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTQwMCw3ICs0MDAsNyBAQCB2b2lkIGNvbXBpbGVTZWxlY3RvcihD
b21waWxlZFNlbGVjdG9yJiBjCiB7CiAgICAgQVNTRVJUKGNvbXBpbGVkU2VsZWN0b3Iuc3RhdHVz
ID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6Ok5vdENvbXBpbGVkKTsKIAotICAgIGlmICgh
SlNDOjpWTTo6Y2FuVXNlSklUKCkpIHsKKyAgICBpZiAoIUpTQzo6T3B0aW9uczo6dXNlSklUKCkp
IHsKICAgICAgICAgY29tcGlsZWRTZWxlY3Rvci5zdGF0dXMgPSBTZWxlY3RvckNvbXBpbGF0aW9u
U3RhdHVzOjpDYW5ub3RDb21waWxlOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI2MzA2OSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDYtMTYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgT3B0aW9uczo6dXNlSklUKCkgYmUgdGhlIGNhbm9u
aWNhbCBzb3VyY2Ugb2YgdHJ1dGggb24gd2hldGhlciB3ZSBzaG91bGQgdXNlIHRoZSBKSVQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NTYKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzgwNDM2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6aXNKSVRFbmFibGVkKToKKwogMjAyMC0wNi0xNSAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1NdIFVw
ZGF0ZSBzYW5kYm94ZXMgdG8gcmVkdWNlIGxvZ2dpbmcgZm9yIG1lZGlhLXJlbGF0ZWQgb3BlcmF0
aW9ucwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkocmV2aXNp
b24gMjYzMDY5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlc2V0
UGx1Z2luTG9hZENsaWVudFBvCiAKIHZvaWQgV2ViUHJvY2Vzczo6aXNKSVRFbmFibGVkKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgY29t
cGxldGlvbkhhbmRsZXIoSlNDOjpWTTo6Y2FuVXNlSklUKCkpOworICAgIGNvbXBsZXRpb25IYW5k
bGVyKEpTQzo6T3B0aW9uczo6dXNlSklUKCkpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OmNsZWFy
UGx1Z2luQ2xpZW50UG9saWNpZXMoKQo=
</data>
<flag name="review"
          id="417462"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>