<?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>201517</bug_id>
          
          <creation_ts>2019-09-05 14:16:31 -0700</creation_ts>
          <short_desc>Move the ResourceLoadObserver logic to WebKit2</short_desc>
          <delta_ts>2019-09-07 15:29:06 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1568256</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-05 14:16:31 -0700</bug_when>
    <thetext>Move the ResourceLoadObserver logic to WebKit2 since it is not used by WebKit1. This allows us to simplify code.

In a follow-up patch, I will simplify the code even further by leveraging the fact that a WebContent process is always associated with a single WebsiteDataStore / sessionID:
- No need for a HashMap of sessionIDs
- No need to even allocate the ResourceLoadObserver if the WebProcess is associated with an ephemeral session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568259</commentid>
    <comment_count>1</comment_count>
      <attachid>378122</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-05 14:26:46 -0700</bug_when>
    <thetext>Created attachment 378122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568265</commentid>
    <comment_count>2</comment_count>
      <attachid>378123</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-05 14:41:00 -0700</bug_when>
    <thetext>Created attachment 378123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568291</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-05 15:31:46 -0700</bug_when>
    <thetext>Kate Cheney</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568292</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-05 15:32:06 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Kate Cheney

LoL, I was trying to cc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568459</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-09-06 02:22:39 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #0)
&gt; Move the ResourceLoadObserver logic to WebKit2 since it is not used by
&gt; WebKit1. This allows us to simplify code.
&gt; 
&gt; In a follow-up patch, I will simplify the code even further by leveraging
&gt; the fact that a WebContent process is always associated with a single
&gt; WebsiteDataStore / sessionID:

This is tempting!

But this is not (yet) the case.
I believe service workers are all being run in the same web process as long as they belong to the same domain, no matter which sessionID they are associated with.

We could also think of reusing a web process (which no longer runs a web page but is in the process cache) to run a web page with the same domain but a different session ID. Or even run different pages with different session IDs in the same process.
Not sure whether we want to do that but that is something we could easily do with the current infrastructure if we want to.

I agree the sessionID infrastructure is adding some complexity.
Since it is there and working though, I am a bit hesitant to remove it.

There is a lot of related complexity in NetworkProcess as well, the benefits would be even greater there (simplifications, limiting sandbox extensions...).
The worry is again the added cost in spinning more processes.

Not sure whether this simplification is doable in WebProcessPool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568505</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 07:42:55 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; Move the ResourceLoadObserver logic to WebKit2 since it is not used by
&gt; &gt; WebKit1. This allows us to simplify code.
&gt; &gt; 
&gt; &gt; In a follow-up patch, I will simplify the code even further by leveraging
&gt; &gt; the fact that a WebContent process is always associated with a single
&gt; &gt; WebsiteDataStore / sessionID:
&gt; 
&gt; This is tempting!
&gt; 
&gt; But this is not (yet) the case.
&gt; I believe service workers are all being run in the same web process as long
&gt; as they belong to the same domain, no matter which sessionID they are
&gt; associated with.
&gt; 
&gt; We could also think of reusing a web process (which no longer runs a web
&gt; page but is in the process cache) to run a web page with the same domain but
&gt; a different session ID. Or even run different pages with different session
&gt; IDs in the same process.
&gt; Not sure whether we want to do that but that is something we could easily do
&gt; with the current infrastructure if we want to.
&gt; 
&gt; I agree the sessionID infrastructure is adding some complexity.
&gt; Since it is there and working though, I am a bit hesitant to remove it.
&gt; 
&gt; There is a lot of related complexity in NetworkProcess as well, the benefits
&gt; would be even greater there (simplifications, limiting sandbox
&gt; extensions...).
&gt; The worry is again the added cost in spinning more processes.
&gt; 
&gt; Not sure whether this simplification is doable in WebProcessPool.

We have assertions in place to make sure that a WebProcess is only associated with a single data store so I’d be surprised if it were not true for service workers. That said, I will take a look. The fact is that web processes can only support one session at the moment and of code tries to do differently, then it is buggy code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568530</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 08:52:00 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to youenn fablet from comment #5)
&gt; &gt; (In reply to Chris Dumez from comment #0)
&gt; &gt; &gt; Move the ResourceLoadObserver logic to WebKit2 since it is not used by
&gt; &gt; &gt; WebKit1. This allows us to simplify code.
&gt; &gt; &gt; 
&gt; &gt; &gt; In a follow-up patch, I will simplify the code even further by leveraging
&gt; &gt; &gt; the fact that a WebContent process is always associated with a single
&gt; &gt; &gt; WebsiteDataStore / sessionID:
&gt; &gt; 
&gt; &gt; This is tempting!
&gt; &gt; 
&gt; &gt; But this is not (yet) the case.
&gt; &gt; I believe service workers are all being run in the same web process as long
&gt; &gt; as they belong to the same domain, no matter which sessionID they are
&gt; &gt; associated with.
&gt; &gt; 
&gt; &gt; We could also think of reusing a web process (which no longer runs a web
&gt; &gt; page but is in the process cache) to run a web page with the same domain but
&gt; &gt; a different session ID. Or even run different pages with different session
&gt; &gt; IDs in the same process.
&gt; &gt; Not sure whether we want to do that but that is something we could easily do
&gt; &gt; with the current infrastructure if we want to.
&gt; &gt; 
&gt; &gt; I agree the sessionID infrastructure is adding some complexity.
&gt; &gt; Since it is there and working though, I am a bit hesitant to remove it.
&gt; &gt; 
&gt; &gt; There is a lot of related complexity in NetworkProcess as well, the benefits
&gt; &gt; would be even greater there (simplifications, limiting sandbox
&gt; &gt; extensions...).
&gt; &gt; The worry is again the added cost in spinning more processes.
&gt; &gt; 
&gt; &gt; Not sure whether this simplification is doable in WebProcessPool.
&gt; 
&gt; We have assertions in place to make sure that a WebProcess is only
&gt; associated with a single data store so I’d be surprised if it were not true
&gt; for service workers. That said, I will take a look. The fact is that web
&gt; processes can only support one session at the moment and of code tries to do
&gt; differently, then it is buggy code.

Looks like you&apos;re right that if I open the same page in private and non-private browsing, I get a single Service Worker Process. This is a very bad bug that we need to fix ASAP. Sharing WebContent processes in such way is not allowed, as we found while working on PSON.
That said, this is not strictly related to the patch at hand here, this will merely impact the next patch to simplify the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568732</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 15:21:57 -0700</bug_when>
    <thetext>ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568745</commentid>
    <comment_count>9</comment_count>
      <attachid>378123</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-06 15:50:43 -0700</bug_when>
    <thetext>Comment on attachment 378123
Patch

This move looks correct to me, but it&apos;s troubling that both wincairo and iOS-wk2 seem to be having problems with service workers. Can you confirm these are unrelated to your patch before landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568749</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 15:59:03 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #9)
&gt; Comment on attachment 378123 [details]
&gt; Patch
&gt; 
&gt; This move looks correct to me, but it&apos;s troubling that both wincairo and
&gt; iOS-wk2 seem to be having problems with service workers. Can you confirm
&gt; these are unrelated to your patch before landing?

The iOS-WK2 failures are unrelated (flaky tests, one of them being https://bugs.webkit.org/show_bug.cgi?id=201550).

The wincairo issue seems to be a related build failure. I am working on fixing this one before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568750</commentid>
    <comment_count>11</comment_count>
      <attachid>378248</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 15:59:20 -0700</bug_when>
    <thetext>Created attachment 378248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568770</commentid>
    <comment_count>12</comment_count>
      <attachid>378253</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 16:58:37 -0700</bug_when>
    <thetext>Created attachment 378253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568797</commentid>
    <comment_count>13</comment_count>
      <attachid>378253</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 18:53:25 -0700</bug_when>
    <thetext>Comment on attachment 378253
Patch

Clearing flags on attachment: 378253

Committed r249603: &lt;https://trac.webkit.org/changeset/249603&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568798</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-06 18:53:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568800</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-06 18:54:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/55137069&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568929</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-09-07 15:26:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/r249617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568930</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-09-07 15:29:06 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #16)
&gt; http://trac.webkit.org/r249617

Thanks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378122</attachid>
            <date>2019-09-05 14:26:46 -0700</date>
            <delta_ts>2019-09-05 14:40:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201517-20190905142645.patch</filename>
            <type>text/plain</type>
            <size>60039</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE2Mjk3M2EzYzk3ZDA1
OGE2YWU3ZWMwODlhMTdlYjBlNjU2YTdhMS4uNzM2YWUyNGY4MDgwZWQ5YTk4ZmQ1MWE2YmEwOTc3
YjI3YjE1ZjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA5LTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMg
dG8gV2ViS2l0MiBzaW5jZSBpdCBpcyBub3QgdXNlZCBieSBXZWJLaXQxLiBUaGlzIGFsbG93cyB1
cyB0byBzaW1wbGlmeQorICAgICAgICBjb2RlLgorCisgICAgICAgIEluIGEgZm9sbG93LXVwIHBh
dGNoLCBJIHdpbGwgc2ltcGxpZnkgdGhlIGNvZGUgZXZlbiBmdXJ0aGVyIGJ5IGxldmVyYWdpbmcg
dGhlIGZhY3QgdGhhdCBhIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAgICBpcyBhbHdheXMgYXNz
b2NpYXRlZCB3aXRoIGEgc2luZ2xlIFdlYnNpdGVEYXRhU3RvcmUgLyBzZXNzaW9uSUQ6CisgICAg
ICAgIC0gTm8gbmVlZCBmb3IgYSBIYXNoTWFwIG9mIHNlc3Npb25JRHMKKyAgICAgICAgLSBObyBu
ZWVkIHRvIGV2ZW4gYWxsb2NhdGUgdGhlIFJlc291cmNlTG9hZE9ic2VydmVyIGlmIHRoZSBXZWJQ
cm9jZXNzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRPYnNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
On5SZXNvdXJjZUxvYWRPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVS
ZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dG
b250TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2Fu
dmFzUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2Fu
dmFzV3JpdGVPck1lYXN1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0ZvclVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Y2xlYXJTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U2hvdWxkTG9nVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKiBwYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oOgorCiAy
MDE5LTA5LTA1ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggaW1wbGljaXQgY29udmVyc2lvbiB0aGF0IGxvc2VzIHByZWNpc2lvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3
ZmM2YTZhNGIyNTZhN2UyYjA2Nzg2MzZlY2Y1ZTQ2MWExMjVhMmMwLi40YjRkYjZiYzY2NGUzZDFl
OTc4ZDExNTJlMWUyOTJkMTNmYjI2MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5
LTA5LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0
aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MiBzaW5jZSBpdCBpcyBub3QgdXNlZCBieSBXZWJLaXQxLiBU
aGlzIGFsbG93cyB1cyB0byBzaW1wbGlmeQorICAgICAgICBjb2RlLgorCisgICAgICAgIEluIGEg
Zm9sbG93LXVwIHBhdGNoLCBJIHdpbGwgc2ltcGxpZnkgdGhlIGNvZGUgZXZlbiBmdXJ0aGVyIGJ5
IGxldmVyYWdpbmcgdGhlIGZhY3QgdGhhdCBhIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAgICBp
cyBhbHdheXMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIFdlYnNpdGVEYXRhU3RvcmUgLyBzZXNz
aW9uSUQ6CisgICAgICAgIC0gTm8gbmVlZCBmb3IgYSBIYXNoTWFwIG9mIHNlc3Npb25JRHMKKyAg
ICAgICAgLSBObyBuZWVkIHRvIGV2ZW4gYWxsb2NhdGUgdGhlIFJlc291cmNlTG9hZE9ic2VydmVy
IGlmIHRoZSBXZWJQcm9jZXNzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcGhlbWVyYWwgc2Vzc2lv
bi4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
LgorICAgICAgICAoV2ViS2l0OjppczN4eFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OldlYlJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNjaGVkdWxlTm90aWZpY2F0aW9uSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRl
Q2VudHJhbFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bm9uTnVsbE93bmVyVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0NhbnZhc1JlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2FudmFzV3JpdGVPck1lYXN1cmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJ
QWNjZXNzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U2NyZWVuQVBJQWNjZXNzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1l
UmVzb2x1dGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwOgorCiAyMDE5LTA5LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNDkyNzUpOiBbR1RLXVtXUEVdIHdyb25n
IHBhZ2UgSUQgcmV0dXJuZWQgYnkgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKaW5kZXggODljNWM2ZDJmMjIwOTc3NTBmNmNjOGM5MTM5NDQ3ZDJkY2VhNDhh
Ni4uYjU0MTA2MmRjZmRjY2RiZDE3M2VmMzYyNzgzOTdkM2M1ZjYxMjgyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKQEAgLTE0OTEsOCArMTQ5MSw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBib29sIGhhc1JlcXVlc3RlZFBhZ2VT
cGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJik7Ci0gICAgdm9pZCBzZXRIYXNSZXF1ZXN0ZWRQYWdlU3BlY2lmaWNTdG9yYWdlQWNj
ZXNzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dp
dGhVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRo
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB3YXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNl
KCk7CiAgICAgdm9pZCBkb3duZ3JhZGVSZWZlcnJlclRvUmVnaXN0cmFibGVEb21haW4oKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAK
aW5kZXggOWNiMzE2ZTlkMTY2ZjY3Y2I3NjYxZGNmZTI3M2E2NjY1MzFmZjU2Yi4uYmVkN2NhNDI4
MThjOGY1NGQyMGFiYjhkYzAyY2FhNDBhMTliOTgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0yNiw0MTQgKzI2LDI1IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKIAotI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZWdp
c3RyYWJsZURvbWFpbi5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
Ci0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1Ob3RpZmljYXRpb25JbnRlcnZhbCB7IDVf
cyB9OwotCi1SZXNvdXJjZUxvYWRPYnNlcnZlcjo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKQotICAg
IDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRh
dGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQotewotfQotCi1SZXNvdXJjZUxvYWRPYnNlcnZlciYg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlc291cmNlTG9hZE9ic2VydmVyPiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKLSAgICByZXR1
cm4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNldFN0YXRpc3RpY3NVcGRhdGVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSYmKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKLXsKLSAgICBBU1NFUlQo
IW1fbm90aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrKEZ1bmN0aW9u
PHZvaWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVuZXJQYWdlSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pPiYmIGNhbGxiYWNrKQotewot
ICAgIEFTU0VSVCghbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2spOwot
ICAgIG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldExvZ1VzZXJJbnRl
cmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYgY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKCFt
X2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLSAgICBtX2xvZ1VzZXJJ
bnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci19Ci0g
ICAgCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+
PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAzOTk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgbV9ub3Rp
ZmljYXRpb25DYWxsYmFjazsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3Vi
cmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQot
ewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSB8fCAhc2hvdWxkTG9nKHBhZ2UtPnNlc3Npb25JRCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKLSAg
ICBjb25zdCBVUkwmIHJlZGlyZWN0ZWRGcm9tVVJMID0gcmVkaXJlY3RSZXNwb25zZS51cmwoKTsK
LSAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3QudXJsKCk7Ci0gICAgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkt
PnVybCgpIDogVVJMKCk7Ci0gICAgCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhv
c3QoKTsKLSAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHRvcEZyYW1lVVJMLmhvc3QoKTsKLQotICAg
IGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCB0b3BGcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRh
cmdldEhvc3QgPT0gdG9wRnJhbWVIb3N0IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldEhvc3QgPT0g
cmVkaXJlY3RlZEZyb21VUkwuaG9zdCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVnaXN0
cmFibGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07Ci0gICAgUmVnaXN0cmFibGVE
b21haW4gdG9wRnJhbWVEb21haW4geyB0b3BGcmFtZVVSTCB9OwotICAgIFJlZ2lzdHJhYmxlRG9t
YWluIHJlZGlyZWN0ZWRGcm9tRG9tYWluIHsgcmVkaXJlY3RlZEZyb21VUkwgfTsKLQotICAgIGlm
ICh0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW4gfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0
RG9tYWluID09IHJlZGlyZWN0ZWRGcm9tRG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ewotICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdldERvbWFpbik7
Ci0gICAgICAgIGF1dG8gbGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VU
aW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
Lmxhc3RTZWVuID0gbGFzdFNlZW47Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVEb21haW4pOwotCi0gICAgICAgIHNj
aGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNSZWRpcmVj
dCkgewotICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNzaW9uSUQoKSwg
cmVkaXJlY3RlZEZyb21Eb21haW4pOwotICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0RG9tYWluKTsKLSAgICAg
ICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCB0YXJnZXREb21haW4pOwotICAgICAg
ICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQocmVk
aXJlY3RlZEZyb21Eb21haW4pOwotCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVk
ZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tl
dExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMLCBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKCFzaG91bGRMb2coc2Vzc2lvbklE
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhv
c3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOwotICAg
IAotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHko
KSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhvc3QpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKLSAgICBS
ZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IG1haW5GcmFtZVVSTCB9OwotCi0gICAg
aWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0KLSAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc2Vzc2lvbklELCB0
YXJnZXREb21haW4pOwotICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBsYXN0U2VlbjsK
LSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRk
KHRvcEZyYW1lRG9tYWluKTsKLQotICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJl
ZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYg
KCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1ZhbGlkKCkgfHwgIXNob3VsZExvZyhkb2N1bWVudC5z
ZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHVybCA9IGRvY3VtZW50
LnVybCgpOwotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzTG9jYWxGaWxl
KCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVnaXN0cmFibGVE
b21haW4gdG9wRnJhbWVEb21haW4geyB1cmwgfTsKLSAgICBhdXRvIG5ld1RpbWUgPSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwot
ICAgIGF1dG8gbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uID0gbV9sYXN0UmVwb3J0ZWRVc2Vy
SW50ZXJhY3Rpb25NYXAuZ2V0KHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAobmV3VGltZSA9PSBs
YXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLnNldCh0b3BGcmFtZURvbWFpbiwgbmV3VGltZSk7
Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHRvcEZyYW1lRG9tYWluKTsKLSAg
ICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGlzdGljcy5s
YXN0U2VlbiA9IG5ld1RpbWU7Ci0gICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSA9IG5ld1RpbWU7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG9wZW5lciA9IGZyYW1lLT5sb2FkZXIoKS5vcGVuZXIoKSkgewotICAgICAgICAgICAg
aWYgKGF1dG8qIG9wZW5lckRvY3VtZW50ID0gb3BlbmVyLT5kb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckZyYW1lID0gb3BlbmVyRG9jdW1lbnQtPmZyYW1lKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gb3BlbmVyUGFnZUlEID0gb3BlbmVyRnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLnBhZ2VJRCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihkb2N1bWVudC5zZXNzaW9uSUQoKSwgdG9w
RnJhbWVEb21haW4sIG9wZW5lclBhZ2VJRC52YWx1ZSgpLCAqb3BlbmVyRG9jdW1lbnQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFdlIG5vdGlmeSByaWdodCBhd2F5IGluIGNhc2Ugb2YgYSB1c2VyIGludGVyYWN0aW9uIGluc3Rl
YWQgb2Ygd2FpdGluZyB0aGUgdXN1YWwgNSBzZWNvbmRzIGJlY2F1c2Ugd2Ugd2FudAotICAgIC8v
IHRvIHVwZGF0ZSBjb29raWUgYmxvY2tpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4K
LSAgICBtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKGRvY3VtZW50LnNl
c3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmIChzaG91
bGRMb2dVc2VySW50ZXJhY3Rpb24oKSkgewotICAgICAgICBhdXRvIGNvdW50ZXIgPSArK21fbG9n
Z2luZ0NvdW50ZXI7Ci0jZGVmaW5lIExPQ0FMX0xPRyhzdHIsIC4uLikgXAotICAgICAgICBSRUxF
QVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1VzZXJJbnRlcmFjdGlvbjogY291bnRlciA9ICUiIFBSSXU2NCAiOiAiIHN0ciwgY291bnRlciwg
IyNfX1ZBX0FSR1NfXykKLQotICAgICAgICBhdXRvIGVzY2FwZUZvckpTT04gPSBbXShTdHJpbmcg
cykgewotICAgICAgICAgICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFjZSgnIicsICJc
XFwiIik7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBl
c2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwotICAgICAgICBhdXRvIGVz
Y2FwZWREb21haW4gPSBlc2NhcGVGb3JKU09OKHRvcEZyYW1lRG9tYWluLnN0cmluZygpKTsKLQot
ICAgICAgICBMT0NBTF9MT0coUiIoeyAidXJsIjogIiV7cHVibGljfXMiLCkiLCBlc2NhcGVkVVJM
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBMT0NBTF9MT0coUiIoICAiZG9tYWluIiA6ICIle3B1
YmxpY31zIiwpIiwgZXNjYXBlZERvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgTE9DQUxf
TE9HKFIiKCAgInVudGlsIiA6ICVmIH0pIiwgbmV3VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNl
Y29uZHMoKSk7Ci0KLSN1bmRlZiBMT0NBTF9MT0cKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
UGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpCi17
Ci0gICAgYXV0byBvcGVuZXJVcmwgPSBvcGVuZXJEb2N1bWVudC51cmwoKTsKLSAgICBSZWdpc3Ry
YWJsZURvbWFpbiBvcGVuZXJEb21haW4geyBvcGVuZXJVcmwgfTsKLSAgICBpZiAoZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbgotICAgICAgICAmJiAhb3BlbmVyRG9j
dW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJh
Y3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKQotICAgICAgICAmJiAhZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3RyaW5nKCksIFdURjo6YmxhbmtVUkwoKSkpIHsKLSAg
ICAgICAgbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2soc2Vzc2lvbklE
LCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9tYWlu
KTsKLSAgICAgICAgLy8gUmVtZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCByZXF1ZXN0cyBz
aW5jZSB0aGV5IGRvbid0IG5lZWQgdG8gYmUgcmVwZWF0ZWQuCi0gICAgICAgIG9wZW5lckRvY3Vt
ZW50LnNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVy
YWN0aW9uKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7Ci0gICAgfQotfQotI2VuZGlmCi0K
LXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpCi17Ci0j
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVu
dC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBy
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50
LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7Ci0gICAgaWYgKCFsb2FkU3RhdHVzKSB7Ci0gICAgICAg
IGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9Mb2FkLmFkZChmYW1pbHlOYW1lKS5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGlzdGljcy5mb250c1N1Y2Nlc3NmdWxseUxv
YWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZENhbGxO
b3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWlu
IG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwo
KSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hB
Y2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5p
c05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVl
OwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVk
dWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3Vt
ZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmFtaWx5TmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxv
YWRTdGF0dXMpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBSZXNvdXJjZUxv
YWRPYnNlcnZlciomIHNoYXJlZE9ic2VydmVyKCkKIHsKLSNpZiBFTkFCTEUoV0VCX0FQSV9TVEFU
SVNUSUNTKQotICAgIGlmICghc2hvdWxkTG9nKGRvY3VtZW50LnNlc3Npb25JRCgpKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudXJsKCkgfTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHJlZ2lzdHJh
YmxlRG9tYWluKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3RyYWJsZURv
bWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKLSAgICBzdGF0aXN0aWNzLmNh
bnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKLSAgICBpZiAoc3RhdGlzdGlj
cy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElzLmFkZChtYWlu
RnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAgICAgICAgc2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZG9j
dW1lbnQpOwotI2VuZGlmCisgICAgc3RhdGljIFJlc291cmNlTG9hZE9ic2VydmVyKiBvYnNlcnZl
ciA9IG51bGxwdHI7CisgICAgcmV0dXJuIG9ic2VydmVyOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pCi17Ci0jaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRv
Y3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFi
bGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFs
c2U7Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBk
b2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgpIH07Ci0gICAgaWYgKHN0YXRpc3RpY3MuY2FudmFz
QWN0aXZpdHlSZWNvcmQucmVjb3JkV3JpdHRlbk9yTWVhc3VyZWRUZXh0KHRleHRXcml0dGVuKSkK
LSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElz
LmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAgICBpZiAoc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrKQotICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlv
bklmTmVlZGVkKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHRXcml0dGVuKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkgZnVuY3Rpb25O
YW1lKQotewotI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRM
b2coZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFi
bGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3Vs
ZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5u
YXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAg
ICAgIHN0YXRpc3RpY3MubmF2aWdhdG9yRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFt
ZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAg
fQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1l
UmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9u
Q2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25O
YW1lKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU2Ny
ZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkgZnVuY3Rpb25OYW1lKQotewotI2lmIEVOQUJMRShXRUJf
QVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQuc2Vzc2lvbklEKCkp
KQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21h
aW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5zY3JlZW5GdW5jdGlvbnNBY2Nlc3NlZC5j
b250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAgICAgIHN0YXRpc3RpY3Muc2NyZWVuRnVuY3Rp
b25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmlj
YXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5G
cmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9Owot
ICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3Nl
ZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0Vu
dHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAg
IGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90
aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsK
LSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAgIAotUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHNlc3Np
b25JRCwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIYXNoTWFwPFJlZ2lzdHJhYmxl
RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4oKTsKLSAgICB9KTsKLQotICAgIGF1dG8g
YWRkRG9tYWluUmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZW5zdXJlKGRvbWFp
biwgWyZkb21haW5dIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9t
YWluKTsKLSAgICB9KTsKLSAgICByZXR1cm4gYWRkRG9tYWluUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2hhcmVkT2JzZXJ2ZXIoKSk7CisgICAgc2hhcmVkT2Jz
ZXJ2ZXIoKSA9ICZvYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2spOwotICAgIGlmIChtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX25vdGlmaWNhdGlvblRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1pbmltdW1Ob3RpZmlj
YXRpb25JbnRlcnZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnVwZGF0ZUNl
bnRyYWxTdGF0aXN0aWNzU3RvcmUoKQotewotICAgIEFTU0VSVChtX25vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKLSAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKLSAgICBtX25vdGlmaWNhdGlv
bkNhbGxiYWNrKHRha2VTdGF0aXN0aWNzKCkpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBV
UkwmIHVybCkKLXsKLSAgICBhdXRvKiByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbiA9IG1fcGVy
U2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5nZXQoc2Vzc2lvbklEKTsKLSAgICBpZiAoIXJl
c291cmNlU3RhdGlzdGljc0J5RG9tYWluKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LQotICAgIGF1dG8gaXRlciA9IHJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluLT5maW5kKFJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0pOwotICAgIGlmIChpdGVyID09IHJlc291cmNlU3RhdGlzdGlj
c0J5RG9tYWluLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiU3RhdGlzdGljcyBmb3IgIiwgdXJsLmhvc3QoKS50b1N0cmluZygp
LCAiOlxuIiwgaXRlci0+dmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLWF1dG8gUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKCkgLT4gUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEK
LXsKLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSBwZXJTZXNzaW9uU3RhdGlzdGljczsK
LQotICAgIGZvciAoYXV0byYgaXRlciA6IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01h
cCkgewotICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsK
LSAgICAgICAgc3RhdGlzdGljcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZXIudmFsdWUtPnNp
emUoKSk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBpdGVyLnZhbHVlLT52YWx1
ZXMoKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc3Rh
dGlzdGljKSk7Ci0KLSAgICAgICAgcGVyU2Vzc2lvblN0YXRpc3RpY3MuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGl0ZXIua2V5LCBXVEZNb3ZlKHN0YXRpc3RpY3MpKSk7Ci0gICAgfQotICAgIAotICAg
IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAgIHJldHVybiBw
ZXJTZXNzaW9uU3RhdGlzdGljczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Y2xl
YXJTdGF0ZSgpCi17Ci0gICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgbV9wZXJT
ZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9sYXN0UmVwb3J0ZWRV
c2VySW50ZXJhY3Rpb25NYXAuY2xlYXIoKTsKLX0KLQotVVJMIFJlc291cmNlTG9hZE9ic2VydmVy
Ojpub25OdWxsT3duZXJVUkwoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAorUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKQogewotICAgIGF1
dG8gdXJsID0gZG9jdW1lbnQudXJsKCk7Ci0gICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwotICAgIGF1dG8gaG9zdCA9IGRvY3VtZW50LnVybCgpLmhvc3QoKTsKLQotICAgIHdoaWxl
ICgoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkgJiYgZnJhbWUgJiYgIWZyYW1lLT5p
c01haW5GcmFtZSgpKSB7Ci0gICAgICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1lLT5vd25l
ckVsZW1lbnQoKTsKLQotICAgICAgICBBU1NFUlQob3duZXJFbGVtZW50ICE9IG51bGxwdHIpOwot
ICAgICAgICAKLSAgICAgICAgYXV0byYgZG9jID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpOwot
ICAgICAgICBmcmFtZSA9IGRvYy5mcmFtZSgpOwotICAgICAgICB1cmwgPSBkb2MudXJsKCk7Ci0g
ICAgICAgIGhvc3QgPSB1cmwuaG9zdCgpOwotICAgIH0KLQotICAgIHJldHVybiB1cmw7CisgICAg
aWYgKCFzaGFyZWRPYnNlcnZlcigpKQorICAgICAgICBzaGFyZWRPYnNlcnZlcigpID0gbmV3IFJl
c291cmNlTG9hZE9ic2VydmVyOworICAgIHJldHVybiAqc2hhcmVkT2JzZXJ2ZXIoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaAppbmRleCA3NTcxZjE2NzUzMWY3MTlmNzY5YTYwZmVkZmQ2MmQ0NDczNmVh
N2I1Li44ODI4MGE5ZjE5OWM3ZGQwOGE1NjcxNDYyZDc5NWVkODRmYzdkNDI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjUsOTEgKzI1LDQx
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2FudmFzQWN0aXZpdHlSZWNvcmQuaCIK
LSNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRp
c3RpY3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgTG9jazsKLWNsYXNzIFdvcmtRdWV1ZTsKLWNs
YXNzIFdhbGxUaW1lOwotfQorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFBhZ2U7Ci1j
bGFzcyBSZWdpc3RyYWJsZURvbWFpbjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJl
c291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1zdHJ1Y3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgewot
ICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9hZE9ic2VydmVy
PjsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpTZXNzaW9uSUQs
IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkKCk7Ci0KLSAgICB2b2lkIGxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgdm9p
ZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJMLCBjb25zdCBVUkwmIG1h
aW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
V2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYpOworICAg
IAorICAgIHZpcnR1YWwgflJlc291cmNlTG9hZE9ic2VydmVyKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiAvKiBuZXdSZXF1ZXN0ICovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKiByZWRp
cmVjdFJlc3BvbnNlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nV2ViU29ja2V0TG9hZGlu
Zyhjb25zdCBVUkwmIC8qIHRhcmdldFVSTCAqLywgY29uc3QgVVJMJiAvKiBtYWluRnJhbWVVUkwg
Ki8sIFBBTDo6U2Vzc2lvbklEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0
aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBsb2dGb250TG9hZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgLyog
ZmFtaWx5TmFtZSAqLywgYm9vbCAvKiBsb2FkU3RhdHVzICovKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbG9nQ2FudmFzUmVhZChjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBs
b2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgLyog
dGV4dFdyaXR0ZW4gKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2dOYXZpZ2F0b3JBUElBY2Nl
c3NlZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmln
YXRvckFQSSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0
IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFVSTCYpIHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDZW50cmFs
U3RhdGlzdGljc1N0b3JlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3RhdGUoKSB7IH0K
ICAgICAKLSAgICB2b2lkIGxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpOwotICAgIHZvaWQgbG9nQ2FudmFzUmVhZChj
b25zdCBEb2N1bWVudCYpOwotICAgIHZvaWQgbG9nQ2FudmFzV3JpdGVPck1lYXN1cmUoY29uc3Qg
RG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHRleHRXcml0dGVuKTsKLSAgICB2b2lkIGxvZ05hdmln
YXRvckFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6TmF2aWdhdG9yQVBJKTsKLSAgICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0
IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yVVJMKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBVUkwmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1Vw
ZGF0ZWRDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBlclNlc3Npb25SZXNvdXJjZUxvYWREYXRhJiYp
PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlcXVlc3RTdG9yYWdlQWNjZXNzVW5k
ZXJPcGVuZXJDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIFBhZ2VJZGVudGlmaWVyLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ1VzZXJJbnRlcmFjdGlvbk5vdGlm
aWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJik+JiYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVDZW50
cmFsU3RhdGlzdGljc1N0b3JlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclN0YXRl
KCk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAmJiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICBib29sIHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRM
b2dVc2VySW50ZXJhY3Rpb24oYm9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24pIHsgbV9zaG91
bGRMb2dVc2VySW50ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247IH0KLSNlbmRp
ZgotCi1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZE9ic2VydmVyKCk7Ci0KLSAgICBib29sIHNo
b3VsZExvZyhQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzY2hlZHVsZU5vdGlm
aWNhdGlvbklmTmVlZGVkKCk7Ci0KLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSB0YWtl
U3RhdGlzdGljcygpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIFBhZ2VJ
ZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgRG9jdW1lbnQmIG9wZW5lckRvY3VtZW50KTsKLSNlbmRp
ZgotCi0gICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8
UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Pj4gbV9wZXJTZXNzaW9u
UmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotICAgIEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFdU
Rjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwotICAgIEZ1bmN0
aW9uPHZvaWQoUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEpPiBtX25vdGlmaWNhdGlvbkNhbGxi
YWNrOwotICAgIEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgUGFnZUlkZW50aWZpZXIsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fcmVx
dWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrOwotICAgIEZ1bmN0aW9uPHZvaWQo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fbG9nVXNlckludGVy
YWN0aW9uTm90aWZpY2F0aW9uQ2FsbGJhY2s7Ci0KLSAgICBUaW1lciBtX25vdGlmaWNhdGlvblRp
bWVyOwotCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykgJiYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgdWludDY0X3QgbV9sb2dnaW5nQ291bnRlciB7IDAgfTsKLSAgICBi
b29sIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpIHsgfQogI2VuZGlmCi0KLSAgICBV
Ukwgbm9uTnVsbE93bmVyVVJMKGNvbnN0IERvY3VtZW50JikgY29uc3Q7CiB9OwogICAgIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXBy
ZWNhdGVkR2xvYmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVwcmVjYXRlZEds
b2JhbFNldHRpbmdzLmgKaW5kZXggNjIwZDEyYTE4YWVmOTJhNjJkNWZjNzRhN2MzYWFiN2E5NzZl
Nzk0NC4uNzg1OTlmODkzNzhlNjQ4NWE5NDhlOGRiOGJiNjdkNTJkY2I4ZGM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oCkBAIC0xMzQsNyAr
MTM0LDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnTWFuYWdl
QXVkaW9TZXNzaW9uOwogCiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZl
clNpemVFbmFibGVkOwotICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZEVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWxsb3dzQW55U1NM
Q2VydGlmaWNhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGFjM2Ey
MWExZDQ3OGU2NWIyNDFmNjUzODMzYjU5YjlmZjQ1M2Q0MTEuLjQ4MTNlNzg2NDI5MGMzZDZkYTU3
Njc3Mjc3ODdlYWRhMzE5NzljMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC02
OTYsNyArNjk2LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bG9nVXNl
ckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICAgICB9CiB9CiAKLXZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRh
dGVkKFJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmIHN0
YXRpc3RpY3MpCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVXBkYXRlZChXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6UGVyU2Vzc2lvblJl
c291cmNlTG9hZERhdGEmJiBzdGF0aXN0aWNzKQogewogICAgIGZvciAoYXV0byYgaXRlciA6IHN0
YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gbmV0d29ya1By
b2Nlc3MoKS5uZXR3b3JrU2Vzc2lvbihpdGVyLmZpcnN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCmluZGV4IDQyYzE3ZTFiMDViNDA2YjM5NGM5NTRhYjc5YzJhMzg2NDk5MjQxMzQuLjA5YjZh
MzUxODJkNTM3N2FmOGZkZjc4ZGZkYzhjMWU1YWE3YTQ2NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkTWFwLmgiCiAjaW5jbHVkZSAiV2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVzc2Fn
ZVBvcnRJZGVudGlmaWVyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBQQUwgewpAQCAtMjM1LDcgKzIzNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGVhclBhZ2VTcGVjaWZpY0RhdGFGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFBBTDo6U2Vzc2lv
bklELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFj
dGlvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lk
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKKyAgICB2b2lkIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NVcGRhdGVkKFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSYmKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
ICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKFBBTDo6U2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApp
bmRleCAzMTNlYzBhZjNiN2Y2MmJmYzc1ZWU5YmU4YzhlOWJmODkwNDg1NzU0Li4zMjE0ODZiMGY2
YzFjNDFkZThmNjUyY2I2MDE3NWE0MTY0NTYwMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTU1Myw2ICs1
NTMsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNwcAogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAKK1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
VXNlck1lZGlhQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hT
eW50aGVzaXNDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAyNGE0M2ZiNzFhZWM4NTYzMTUyMDkzZDEwOTc4ZDA4MjYxZDkw
Y2U3Li4wYTY3ZjI4NDRjYzM3ZjVmYTMyMzgzN2VjZjhiM2Y3OGI1YTVhZDM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkxMCw2ICs5
MTAsNyBAQAogCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRhdGlvbkFjY2Vz
c0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDY1N0Q4ODgyMjY2NEExQTAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NBbGVydC5tbSAq
LzsgfTsKIAkJNDY1RjRFMDYyMzBCMkU5NTAwM0NFREI3IC8qIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NjVGNEUwNTIzMEIyRTdDMDAzQ0VEQjcgLyogU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIuaCAq
LzsgfTsKIAkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4dE1hbmFnZXJD
b25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rp
b24uaCAqLzsgfTsKKwkJNDY3MUZGMUYyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAq
LzsgfTsKIAkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjdFNDNFNzIyNDNGRjZEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRl
cnMuaCAqLzsgfTsKIAkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9j
ZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9j
ZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQk0NkIwNTI0NzIyNjY4RDg1MDAyNjVC
OTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkIwNTI0NDIyNjY4
RDIzMDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9s
bGVyLmggKi87IH07CkBAIC0zMjE4LDYgKzMyMTksOCBAQAogCQk0NjZCQzAzODFGQTI2NkM5MDAy
RkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEg
LyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDY2QkMwM0ExRkEyNjZDOTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY3MUZGMUUyMzIxN0VGRjAwMUI2NEM3IC8qIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3RTQzRTcy
MjQzRkY2RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM1NjlBMjFFODFDQzcwMDZFMjdB
MyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm92aXNpb25hbFBhZ2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNCw2ICs3NjI3LDggQEAKIAkJ
CQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8sCiAJCQkJMUEx
RTA5MzExODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAgKi8s
CiAJCQkJMUExRTA5MzIxODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVu
dC5oICovLAorCQkJCTQ2NzFGRjFFMjMyMTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAgKi8sCisJCQkJNDY3MUZGMUQyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJlc291
cmNlTG9hZE9ic2VydmVyLmggKi8sCiAJCQkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlNlYXJjaFBvcHVwTWVudS5jcHAgKi8sCiAJCQkJRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlNlYXJjaFBvcHVwTWVudS5oICovLAogCQkJCUMxNDkzODAzMjIzNDFERjcwMDBDRDcwNyAv
KiBXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwICovLApAQCAtOTM2MSw2ICs5MzY2LDcgQEAK
IAkJCQlCQzMzREQ2ODEyMzg0NjQ2MDAzNjBGM0YgLyogQVBJTnVtYmVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzg1N0ZCNTEyQjgzMEU2MDBFREVCMkUgLyogQVBJT3BlblBhbmVsUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M4OUQyOTgxQTY3NTNCMjAwM0E1RkRFIC8qIEFQSVBh
Z2VDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NjcxRkYxRjIzMjE3RUZGMDAx
QjY0QzcgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
QzEzMzZDMTg1NjVDN0EwMEYzRUMwNSAvKiBBUElQYWdlSGFuZGxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQUZERDMxNTE4OTFCNTQwMDAxNTM5NzAgLyogQVBJUG9saWN5Q2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Q0U0RDIyMDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1ZjE5Y2MyOTA2YWNmODZhOWY2YzdlMmYyNDk2ZDhmMzg4
ZmMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMzg5IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
KgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
KgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJS
ZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKKworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgU2Vjb25kcyBt
aW5pbXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwgeyA1X3MgfTsKKworc3RhdGljIGJvb2wgaXMzeHhS
ZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4g
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA8PSAzOTk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3MoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIHJldHVybiBEZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpOworfQorCitXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6V2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIoKQorICAgIDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJldl
YlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQorewor
fQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1Vu
ZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFn
ZUlELCBEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpCit7CisgICAgYXV0byBvcGVuZXJVcmwgPSBv
cGVuZXJEb2N1bWVudC51cmwoKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBvcGVuZXJEb21haW4g
eyBvcGVuZXJVcmwgfTsKKyAgICBpZiAoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9w
ZW5lckRvbWFpbgorICAgICAgICAmJiAhb3BlbmVyRG9jdW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNw
ZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9y
YWdlQWNjZXNzKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwu
c3RyaW5nKCksIFdURjo6YmxhbmtVUkwoKSkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKHNlc3Npb25JRCwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBv
cGVuZXJQYWdlSUQsIG9wZW5lckRvbWFpbiksIDApOworICAgICAgICAKKyAgICAgICAgLy8gUmVt
ZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCByZXF1ZXN0cyBzaW5jZSB0aGV5IGRvbid0IG5l
ZWQgdG8gYmUgcmVwZWF0ZWQuCisgICAgICAgIG9wZW5lckRvY3VtZW50LnNldEhhc1JlcXVlc3Rl
ZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2Vzcyk7CisgICAgfQorfQorICAgIAorUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGVyU2Vzc2lvblJl
c291cmNlU3RhdGlzdGljc01hcC5lbnN1cmUoc2Vzc2lvbklELCBbXSB7CisgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+PigpOworICAgIH0pOworCisgICAgYXV0byBhZGREb21haW5SZXN1bHQgPSBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLT5lbnN1cmUoZG9tYWluLCBbJmRvbWFpbl0geworICAgICAgICBy
ZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb21haW4pOworICAgIH0pOworICAgIHJldHVy
biBhZGREb21haW5SZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFdlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAo
bV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBt
X25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9ub3RpZmljYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX25vdGlmaWNh
dGlvblRpbWVyLnN0YXJ0T25lU2hvdChtaW5pbXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwpOworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0
b3JlKCkKK3sKKyAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCkuc2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NVcGRhdGVkKHRha2VTdGF0aXN0aWNzKCkpLCAwKTsKK30KKworU3RyaW5n
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byogcmVzb3VyY2VTdGF0aXN0
aWNzQnlEb21haW4gPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0KHNlc3Np
b25JRCk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbikKKyAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBhdXRvIGl0ZXIgPSByZXNvdXJjZVN0YXRpc3RpY3NC
eURvbWFpbi0+ZmluZChSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9KTsKKyAgICBpZiAoaXRlciA9
PSByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbi0+ZW5kKCkpCisgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlN0YXRpc3RpY3MgZm9yICIsIHVy
bC5ob3N0KCkudG9TdHJpbmcoKSwgIjpcbiIsIGl0ZXItPnZhbHVlLnRvU3RyaW5nKCkpOworfQor
CithdXRvIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp0YWtlU3RhdGlzdGljcygpIC0+IFBlclNl
c3Npb25SZXNvdXJjZUxvYWREYXRhCit7CisgICAgUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEg
cGVyU2Vzc2lvblN0YXRpc3RpY3M7CisKKyAgICBmb3IgKGF1dG8mIGl0ZXIgOiBtX3BlclNlc3Np
b25SZXNvdXJjZVN0YXRpc3RpY3NNYXApIHsKKyAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0
YXRpc3RpY3M+IHN0YXRpc3RpY3M7CisgICAgICAgIHN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShpdGVyLnZhbHVlLT5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGlz
dGljIDogaXRlci52YWx1ZS0+dmFsdWVzKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOworCisgICAgICAgIHBlclNlc3Npb25TdGF0
aXN0aWNzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpdGVyLmtleSwgV1RGTW92ZShzdGF0aXN0aWNz
KSkpOworICAgIH0KKyAgICAKKyAgICBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAu
Y2xlYXIoKTsKKyAgICByZXR1cm4gcGVyU2Vzc2lvblN0YXRpc3RpY3M7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyU3RhdGUoKQoreworICAgIG1fbm90aWZpY2F0aW9u
VGltZXIuc3RvcCgpOworICAgIG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVh
cigpOworICAgIG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLmNsZWFyKCk7Cit9CisK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50
JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpCit7
CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVy
bCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4p
OworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAg
aWYgKCFsb2FkU3RhdHVzKSB7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9M
b2FkLmFkZChmYW1pbHlOYW1lKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkQ2FsbE5v
dGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3Rh
dGlzdGljcy5mb250c1N1Y2Nlc3NmdWxseUxvYWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRy
eSkKKyAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Cisg
ICAgfQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsg
ZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZy
YW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJl
Z2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxs
Tm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0
aW9uQ2FsbGJhY2spCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZmFtaWx5
TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGxvYWRTdGF0dXMpOworI2VuZGlmCit9CisgICAgCit2
b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50
JiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmICgh
c2hvdWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWlu
IHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHJl
Z2lzdHJhYmxlRG9tYWluKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3Ry
YWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBzdGF0aXN0
aWNzLmNhbnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKKyAgICBpZiAoc3Rh
dGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElzLmFk
ZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKKyAgICAg
ICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZG9jdW1lbnQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmxvZ0NhbnZhc1dyaXRlT3JNZWFzdXJlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3Qg
U3RyaW5nJiB0ZXh0V3JpdHRlbikKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQor
ICAgIGlmICghc2hvdWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5zZXNzaW9u
SUQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJh
YmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lv
bklELCByZWdpc3RyYWJsZURvbWFpbik7CisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9u
Q2FsbGJhY2sgPSBmYWxzZTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3Ry
YWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBpZiAoc3Rh
dGlzdGljcy5jYW52YXNBY3Rpdml0eVJlY29yZC5yZWNvcmRXcml0dGVuT3JNZWFzdXJlZFRleHQo
dGV4dFdyaXR0ZW4pKQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hB
Y2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5p
c05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVl
OworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIHNjaGVk
dWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3Vt
ZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFdyaXR0ZW4pOworI2VuZGlmCit9CisgICAgCit2
b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dOYXZpZ2F0b3JBUElBY2Nlc3NlZChjb25z
dCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmln
YXRvckFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykK
KyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lv
bklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3Ry
YWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Np
b25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLm5hdmlnYXRvckZ1bmN0aW9u
c0FjY2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlzdGljcy5u
YXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVnaXN0cmFi
bGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVu
dCgpLnVybCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURvbWFp
bnNXaGljaEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkpLmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IHRydWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAg
ICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCit9
CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3Nl
ZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OlNjcmVlbkFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElD
UykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vz
c2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdp
c3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNl
c3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNh
dGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLnNjcmVlbkZ1bmN0aW9u
c0FjY2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlzdGljcy5z
Y3JlZW5GdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVnaXN0cmFibGVE
b21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgp
LnVybCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURvbWFpbnNX
aGljaEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4uc3RyaW5n
KCkpLmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9
IHRydWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAg
c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
ZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCit9CisK
K3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25z
dCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUt
PnBhZ2UoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UgfHwgIXNob3VsZExvZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MocGFnZS0+c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBib29sIGlzUmVkaXJlY3QgPSBpczN4eFJlZGlyZWN0KHJlZGlyZWN0UmVzcG9uc2UpOwor
ICAgIGNvbnN0IFVSTCYgcmVkaXJlY3RlZEZyb21VUkwgPSByZWRpcmVjdFJlc3BvbnNlLnVybCgp
OworICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0gbmV3UmVxdWVzdC51cmwoKTsKKyAgICBjb25z
dCBVUkwmIHRvcEZyYW1lVVJMID0gZnJhbWUgPyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQo
KS0+dXJsKCkgOiBVUkwoKTsKKyAgICAKKyAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJnZXRVUkwu
aG9zdCgpOworICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gdG9wRnJhbWVVUkwuaG9zdCgpOworCisg
ICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IHRvcEZyYW1lSG9zdC5pc0VtcHR5KCkgfHwg
dGFyZ2V0SG9zdCA9PSB0b3BGcmFtZUhvc3QgfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCA9
PSByZWRpcmVjdGVkRnJvbVVSTC5ob3N0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdp
c3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdpc3RyYWJs
ZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IHRvcEZyYW1lVVJMIH07CisgICAgUmVnaXN0cmFibGVE
b21haW4gcmVkaXJlY3RlZEZyb21Eb21haW4geyByZWRpcmVjdGVkRnJvbVVSTCB9OworCisgICAg
aWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbiB8fCAoaXNSZWRpcmVjdCAmJiB0YXJn
ZXREb21haW4gPT0gcmVkaXJlY3RlZEZyb21Eb21haW4pKQorICAgICAgICByZXR1cm47CisKKyAg
ICB7CisgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNzaW9uSUQoKSwgdGFyZ2V0RG9tYWlu
KTsKKyAgICAgICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVj
ZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisgICAgICAgIHRhcmdldFN0YXRpc3Rp
Y3MubGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmFkZCh0b3BGcmFtZURvbWFpbik7CisKKyAgICAgICAg
c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlmIChpc1JlZGly
ZWN0KSB7CisgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgp
LCByZWRpcmVjdGVkRnJvbURvbWFpbik7CisgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlz
dGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXREb21haW4pOworICAg
ICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdldERvbWFpbik7CisgICAg
ICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmFkZChy
ZWRpcmVjdGVkRnJvbURvbWFpbik7CisKKyAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5l
ZWRlZCgpOworICAgIH0KK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2Vi
U29ja2V0TG9hZGluZyhjb25zdCBVUkwmIHRhcmdldFVSTCwgY29uc3QgVVJMJiBtYWluRnJhbWVV
UkwsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291
cmNlTG9hZFN0YXRpc3RpY3Moc2Vzc2lvbklEKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIG1haW5GcmFtZUhvc3Qg
PSBtYWluRnJhbWVVUkwuaG9zdCgpOworICAgIAorICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHko
KSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhv
c3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXRE
b21haW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFp
biB7IG1haW5GcmFtZVVSTCB9OworCisgICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURv
bWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisKKyAg
ICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oc2Vzc2lvbklELCB0YXJnZXREb21haW4pOworICAgIHRhcmdldFN0YXRp
c3RpY3MubGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsKKworICAgIHNjaGVk
dWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1Zh
bGlkKCkgfHwgIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lv
bklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB1cmwgPSBkb2N1bWVudC51cmwo
KTsKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0xvY2FsRmlsZSgpIHx8
IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWlu
IHRvcEZyYW1lRG9tYWluIHsgdXJsIH07CisgICAgYXV0byBuZXdUaW1lID0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICBh
dXRvIGxhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbiA9IG1fbGFzdFJlcG9ydGVkVXNlckludGVy
YWN0aW9uTWFwLmdldCh0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKG5ld1RpbWUgPT0gbGFzdFJl
cG9ydGVkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RSZXBv
cnRlZFVzZXJJbnRlcmFjdGlvbk1hcC5zZXQodG9wRnJhbWVEb21haW4sIG5ld1RpbWUpOworCisg
ICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7CisgICAgc3Rh
dGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgIHN0YXRpc3RpY3MubGFzdFNl
ZW4gPSBuZXdUaW1lOworICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgPSBuZXdUaW1lOworCisgICAgaWYgKGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKSkg
eworICAgICAgICBpZiAoYXV0byogb3BlbmVyID0gZnJhbWUtPmxvYWRlcigpLm9wZW5lcigpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRG9jdW1lbnQgPSBvcGVuZXItPmRvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRnJhbWUgPSBvcGVuZXJEb2N1
bWVudC0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvcGVuZXJQYWdl
SUQgPSBvcGVuZXJGcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkucGFnZUlEKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKGRvY3VtZW50LnNl
c3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbiwgb3BlbmVyUGFnZUlELnZhbHVlKCksICpvcGVuZXJE
b2N1bWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gV2Ugbm90aWZ5IHJpZ2h0IGF3YXkgaW4gY2FzZSBvZiBhIHVzZXIgaW50
ZXJhY3Rpb24gaW5zdGVhZCBvZiB3YWl0aW5nIHRoZSB1c3VhbCA1IHNlY29uZHMgYmVjYXVzZSB3
ZSB3YW50CisgICAgLy8gdG8gdXBkYXRlIGNvb2tpZSBibG9ja2luZyBzdGF0ZSBhcyBxdWlja2x5
IGFzIHBvc3NpYmxlLgorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6TG9nVXNlckludGVyYWN0aW9uKGRvY3VtZW50LnNlc3Npb25J
RCgpLCB0b3BGcmFtZURvbWFpbiksIDApOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgaWYgKG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIGF1dG8gY291bnRl
ciA9ICsrbV9sb2dnaW5nQ291bnRlcjsKKyNkZWZpbmUgTE9DQUxfTE9HKHN0ciwgLi4uKSBcCisg
ICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uOiBjb3VudGVyID0gJSIgUFJJdTY0ICI6ICIgc3Ry
LCBjb3VudGVyLCAjI19fVkFfQVJHU19fKQorCisgICAgICAgIGF1dG8gZXNjYXBlRm9ySlNPTiA9
IFtdKFN0cmluZyBzKSB7CisgICAgICAgICAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKS5yZXBs
YWNlKCciJywgIlxcXCIiKTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9OworICAg
ICAgICBhdXRvIGVzY2FwZWRVUkwgPSBlc2NhcGVGb3JKU09OKHVybC5zdHJpbmcoKSk7CisgICAg
ICAgIGF1dG8gZXNjYXBlZERvbWFpbiA9IGVzY2FwZUZvckpTT04odG9wRnJhbWVEb21haW4uc3Ry
aW5nKCkpOworCisgICAgICAgIExPQ0FMX0xPRyhSIih7ICJ1cmwiOiAiJXtwdWJsaWN9cyIsKSIs
IGVzY2FwZWRVUkwudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPQ0FMX0xPRyhSIiggICJkb21h
aW4iIDogIiV7cHVibGljfXMiLCkiLCBlc2NhcGVkRG9tYWluLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBMT0NBTF9MT0coUiIoICAidW50aWwiIDogJWYgfSkiLCBuZXdUaW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkuc2Vjb25kcygpKTsKKworI3VuZGVmIExPQ0FMX0xPRworICAgIH0KKyNlbmRpZgor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYyMjk2MWVkNGRlMjgxZWZhZGU0ZWY5Yjg3NGY0YTljMTU5MDZjODkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKwor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlJlc291cmNlTG9hZE9ic2VydmVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQZXJTZXNzaW9u
UmVzb3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpTZXNzaW9uSUQsIFZlY3Rv
cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OworCisgICAgV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIoKTsKKyAgICAKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25z
dCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkg
ZmluYWw7CisgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJM
LCBjb25zdCBVUkwmIG1haW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpIGZpbmFsOworICAgIHZv
aWQgbG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBXZWJD
b3JlOjpEb2N1bWVudCYpIGZpbmFsOworICAgIHZvaWQgbG9nRm9udExvYWQoY29uc3QgV2ViQ29y
ZTo6RG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIGJvb2wgbG9hZFN0YXR1cykg
ZmluYWw7CisgICAgdm9pZCBsb2dDYW52YXNSZWFkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50Jikg
ZmluYWw7CisgICAgdm9pZCBsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBXZWJDb3JlOjpE
b2N1bWVudCYsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pIGZpbmFsOworICAgIHZvaWQgbG9n
TmF2aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkpIGZpbmFsOworICAgIHZv
aWQgbG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIGZpbmFsOworCisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBzZXRTaG91bGRMb2dVc2VySW50ZXJhY3Rp
b24oYm9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24pIGZpbmFsIHsgbV9zaG91bGRMb2dVc2Vy
SW50ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247IH0KKyNlbmRpZgorCisgICAg
U3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFVSTCYpIGZpbmFs
OworICAgIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSgpIGZpbmFsOworICAgIHZv
aWQgY2xlYXJTdGF0ZSgpIGZpbmFsOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpOwor
ICAgIHZvaWQgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworCisgICAgUGVyU2Vzc2lv
blJlc291cmNlTG9hZERhdGEgdGFrZVN0YXRpc3RpY3MoKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9y
YWdlQWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgV2ViQ29yZTo6RG9jdW1lbnQmIG9wZW5lckRvY3VtZW50
KTsKKworICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFw
PFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzPj4+IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcDsKKyAgICBIYXNoTWFwPFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXVEY6OldhbGxUaW1lPiBtX2xhc3RSZXBvcnRlZFVz
ZXJJbnRlcmFjdGlvbk1hcDsKKworICAgIFdlYkNvcmU6OlRpbWVyIG1fbm90aWZpY2F0aW9uVGlt
ZXI7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB1aW50NjRfdCBtX2xvZ2dpbmdD
b3VudGVyIHsgMCB9OworICAgIGJvb2wgbV9zaG91bGRMb2dVc2VySW50ZXJhY3Rpb24geyBmYWxz
ZSB9OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggNjRhZTEyMGY5Yjg5NjZhYzMwM2M1NWQ5NDc5MzQ5ODA3N2I2ZDhj
MC4uZWM5NWY2M2Y1ZTFhODg2NGUzZGUzMDFjY2U3NDMxODU1ZGQ3OWM0MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUg
IldlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViU1dDb250ZXh0TWFuYWdlckNvbm5l
Y3Rpb24uaCIKICNpbmNsdWRlICJXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbk1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiV2ViU2VydmljZVdvcmtlclByb3ZpZGVyLmgiCkBAIC0xMTAsNyArMTEx
LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
Z2lzdHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CkBAIC0yMTcsMTYgKzIxNyw3IEBAIFdlYlByb2Nl
c3M6OldlYlByb2Nlc3MoKQogICAgIG1fcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzLmFkZChQ
QUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBIYXNoTWFwPHVuc2lnbmVkLCBXYWxs
VGltZT4oKSk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5zZXRTdGF0aXN0aWNzVXBkYXRlZENhbGxiYWNr
KFt0aGlzXSAoYXV0byYmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXVEZNb3ZlKHN0
YXRpc3RpY3MpKSwgMCk7Ci0gICAgfSk7Ci0KLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hh
cmVkKCkuc2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrKFt0aGlzXSAo
UEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pIHsKLSAgICAgICAgZW5zdXJlTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKHNl
c3Npb25JRCwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBvcGVuZXJQYWdlSUQsIG9wZW5l
ckRvbWFpbiksIDApOwotICAgIH0pOwotICAgIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5zZXRMb2dVc2VySW50ZXJhY3Rpb25Ob3RpZmljYXRpb25DYWxsYmFjayhbdGhpc10g
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
bikgeyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvZ1VzZXJJbnRlcmFj
dGlvbihzZXNzaW9uSUQsIGRvbWFpbiksIDApOwotICAgIH0pOworICAgIFJlc291cmNlTG9hZE9i
c2VydmVyOjpzZXRTaGFyZWQoKm5ldyBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcik7CiAjZW5kaWYK
ICAgICAKICAgICBHaWdhY2FnZTo6ZGlzYWJsZURpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSWZT
aG91bGRCZUVuYWJsZWQoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378123</attachid>
            <date>2019-09-05 14:41:00 -0700</date>
            <delta_ts>2019-09-06 15:59:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201517-20190905144059.patch</filename>
            <type>text/plain</type>
            <size>61154</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWE2Mjk3M2EzYzk3ZDA1
OGE2YWU3ZWMwODlhMTdlYjBlNjU2YTdhMS4uNzM2YWUyNGY4MDgwZWQ5YTk4ZmQ1MWE2YmEwOTc3
YjI3YjE1ZjI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA5LTA1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMg
dG8gV2ViS2l0MiBzaW5jZSBpdCBpcyBub3QgdXNlZCBieSBXZWJLaXQxLiBUaGlzIGFsbG93cyB1
cyB0byBzaW1wbGlmeQorICAgICAgICBjb2RlLgorCisgICAgICAgIEluIGEgZm9sbG93LXVwIHBh
dGNoLCBJIHdpbGwgc2ltcGxpZnkgdGhlIGNvZGUgZXZlbiBmdXJ0aGVyIGJ5IGxldmVyYWdpbmcg
dGhlIGZhY3QgdGhhdCBhIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAgICBpcyBhbHdheXMgYXNz
b2NpYXRlZCB3aXRoIGEgc2luZ2xlIFdlYnNpdGVEYXRhU3RvcmUgLyBzZXNzaW9uSUQ6CisgICAg
ICAgIC0gTm8gbmVlZCBmb3IgYSBIYXNoTWFwIG9mIHNlc3Npb25JRHMKKyAgICAgICAgLSBObyBu
ZWVkIHRvIGV2ZW4gYWxsb2NhdGUgdGhlIFJlc291cmNlTG9hZE9ic2VydmVyIGlmIHRoZSBXZWJQ
cm9jZXNzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcGhlbWVyYWwgc2Vzc2lvbi4KKworICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaGFyZWRPYnNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQpOgorICAgICAgICAqIGxvYWRlci9SZXNvdXJj
ZUxvYWRPYnNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
On5SZXNvdXJjZUxvYWRPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRP
YnNlcnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVS
ZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dG
b250TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2Fu
dmFzUmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2Fu
dmFzV3JpdGVPck1lYXN1cmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OmxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0ZvclVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Y2xlYXJTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U2hvdWxkTG9nVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKiBwYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oOgorCiAy
MDE5LTA5LTA1ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggaW1wbGljaXQgY29udmVyc2lvbiB0aGF0IGxvc2VzIHByZWNpc2lvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3
ZmM2YTZhNGIyNTZhN2UyYjA2Nzg2MzZlY2Y1ZTQ2MWExMjVhMmMwLi40YjRkYjZiYzY2NGUzZDFl
OTc4ZDExNTJlMWUyOTJkMTNmYjI2MThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5
LTA5LTA1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0
aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MiBzaW5jZSBpdCBpcyBub3QgdXNlZCBieSBXZWJLaXQxLiBU
aGlzIGFsbG93cyB1cyB0byBzaW1wbGlmeQorICAgICAgICBjb2RlLgorCisgICAgICAgIEluIGEg
Zm9sbG93LXVwIHBhdGNoLCBJIHdpbGwgc2ltcGxpZnkgdGhlIGNvZGUgZXZlbiBmdXJ0aGVyIGJ5
IGxldmVyYWdpbmcgdGhlIGZhY3QgdGhhdCBhIFdlYkNvbnRlbnQgcHJvY2VzcworICAgICAgICBp
cyBhbHdheXMgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIFdlYnNpdGVEYXRhU3RvcmUgLyBzZXNz
aW9uSUQ6CisgICAgICAgIC0gTm8gbmVlZCBmb3IgYSBIYXNoTWFwIG9mIHNlc3Npb25JRHMKKyAg
ICAgICAgLSBObyBuZWVkIHRvIGV2ZW4gYWxsb2NhdGUgdGhlIFJlc291cmNlTG9hZE9ic2VydmVy
IGlmIHRoZSBXZWJQcm9jZXNzIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcGhlbWVyYWwgc2Vzc2lv
bi4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3Bw
LgorICAgICAgICAoV2ViS2l0OjppczN4eFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OldlYlJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNjaGVkdWxlTm90aWZpY2F0aW9uSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRl
Q2VudHJhbFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6bm9uTnVsbE93bmVyVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0NhbnZhc1JlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2FudmFzV3JpdGVPck1lYXN1cmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJ
QWNjZXNzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U2NyZWVuQVBJQWNjZXNzZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1l
UmVzb2x1dGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwOgorCiAyMDE5LTA5LTA1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNDkyNzUpOiBbR1RLXVtXUEVdIHdyb25n
IHBhZ2UgSUQgcmV0dXJuZWQgYnkgd2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKaW5kZXggODljNWM2ZDJmMjIwOTc3NTBmNmNjOGM5MTM5NDQ3ZDJkY2VhNDhh
Ni4uYjU0MTA2MmRjZmRjY2RiZDE3M2VmMzYyNzgzOTdkM2M1ZjYxMjgyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgKQEAgLTE0OTEsOCArMTQ5MSw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBib29sIGhhc1JlcXVlc3RlZFBhZ2VT
cGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJik7Ci0gICAgdm9pZCBzZXRIYXNSZXF1ZXN0ZWRQYWdlU3BlY2lmaWNTdG9yYWdlQWNj
ZXNzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dp
dGhVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRo
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB3YXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVudFJlc291cmNl
KCk7CiAgICAgdm9pZCBkb3duZ3JhZGVSZWZlcnJlclRvUmVnaXN0cmFibGVEb21haW4oKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAK
aW5kZXggOWNiMzE2ZTlkMTY2ZjY3Y2I3NjYxZGNmZTI3M2E2NjY1MzFmZjU2Yi4uYmVkN2NhNDI4
MThjOGY1NGQyMGFiYjhkYzAyY2FhNDBhMTliOTgxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0yNiw0MTQgKzI2LDI1IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCIKIAotI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZWdp
c3RyYWJsZURvbWFpbi5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3MuaCIKLSNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
Ci0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1Ob3RpZmljYXRpb25JbnRlcnZhbCB7IDVf
cyB9OwotCi1SZXNvdXJjZUxvYWRPYnNlcnZlcjo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKQotICAg
IDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRh
dGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQotewotfQotCi1SZXNvdXJjZUxvYWRPYnNlcnZlciYg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFJlc291cmNlTG9hZE9ic2VydmVyPiByZXNvdXJjZUxvYWRPYnNlcnZlcjsKLSAgICByZXR1
cm4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNldFN0YXRpc3RpY3NVcGRhdGVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSYmKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKLXsKLSAgICBBU1NFUlQo
IW1fbm90aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2sgPSBX
VEZNb3ZlKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrKEZ1bmN0aW9u
PHZvaWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVuZXJQYWdlSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pPiYmIGNhbGxiYWNrKQotewot
ICAgIEFTU0VSVCghbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2spOwot
ICAgIG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldExvZ1VzZXJJbnRl
cmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYgY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKCFt
X2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLSAgICBtX2xvZ1VzZXJJ
bnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7Ci19Ci0g
ICAgCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+
PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAzOTk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6cmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgJiYgbV9ub3Rp
ZmljYXRpb25DYWxsYmFjazsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU3Vi
cmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQot
ewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLQotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSB8fCAhc2hvdWxkTG9nKHBhZ2UtPnNlc3Npb25JRCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3BvbnNlKTsKLSAg
ICBjb25zdCBVUkwmIHJlZGlyZWN0ZWRGcm9tVVJMID0gcmVkaXJlY3RSZXNwb25zZS51cmwoKTsK
LSAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3QudXJsKCk7Ci0gICAgY29uc3Qg
VVJMJiB0b3BGcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRvY3VtZW50KCkt
PnVybCgpIDogVVJMKCk7Ci0gICAgCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhv
c3QoKTsKLSAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHRvcEZyYW1lVVJMLmhvc3QoKTsKLQotICAg
IGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCB0b3BGcmFtZUhvc3QuaXNFbXB0eSgpIHx8IHRh
cmdldEhvc3QgPT0gdG9wRnJhbWVIb3N0IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdldEhvc3QgPT0g
cmVkaXJlY3RlZEZyb21VUkwuaG9zdCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVnaXN0
cmFibGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07Ci0gICAgUmVnaXN0cmFibGVE
b21haW4gdG9wRnJhbWVEb21haW4geyB0b3BGcmFtZVVSTCB9OwotICAgIFJlZ2lzdHJhYmxlRG9t
YWluIHJlZGlyZWN0ZWRGcm9tRG9tYWluIHsgcmVkaXJlY3RlZEZyb21VUkwgfTsKLQotICAgIGlm
ICh0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW4gfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0
RG9tYWluID09IHJlZGlyZWN0ZWRGcm9tRG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ewotICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdldERvbWFpbik7
Ci0gICAgICAgIGF1dG8gbGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VU
aW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNz
Lmxhc3RTZWVuID0gbGFzdFNlZW47Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVEb21haW4pOwotCi0gICAgICAgIHNj
aGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNSZWRpcmVj
dCkgewotICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNzaW9uSUQoKSwg
cmVkaXJlY3RlZEZyb21Eb21haW4pOwotICAgICAgICByZWRpcmVjdGluZ09yaWdpblN0YXRpc3Rp
Y3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0RG9tYWluKTsKLSAgICAg
ICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCB0YXJnZXREb21haW4pOwotICAgICAg
ICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5hZGQocmVk
aXJlY3RlZEZyb21Eb21haW4pOwotCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVk
ZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tl
dExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNvbnN0IFVSTCYgbWFpbkZyYW1lVVJMLCBQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKCFzaG91bGRMb2coc2Vzc2lvbklE
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhv
c3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOwotICAg
IAotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHko
KSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhvc3QpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKLSAgICBS
ZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IG1haW5GcmFtZVVSTCB9OwotCi0gICAg
aWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0KLSAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc2Vzc2lvbklELCB0
YXJnZXREb21haW4pOwotICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBsYXN0U2VlbjsK
LSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRk
KHRvcEZyYW1lRG9tYWluKTsKLQotICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJl
ZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgaWYg
KCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1ZhbGlkKCkgfHwgIXNob3VsZExvZyhkb2N1bWVudC5z
ZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHVybCA9IGRvY3VtZW50
LnVybCgpOwotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlzTG9jYWxGaWxl
KCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVnaXN0cmFibGVE
b21haW4gdG9wRnJhbWVEb21haW4geyB1cmwgfTsKLSAgICBhdXRvIG5ld1RpbWUgPSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwot
ICAgIGF1dG8gbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uID0gbV9sYXN0UmVwb3J0ZWRVc2Vy
SW50ZXJhY3Rpb25NYXAuZ2V0KHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAobmV3VGltZSA9PSBs
YXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGFz
dFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLnNldCh0b3BGcmFtZURvbWFpbiwgbmV3VGltZSk7
Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHRvcEZyYW1lRG9tYWluKTsKLSAg
ICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGlzdGljcy5s
YXN0U2VlbiA9IG5ld1RpbWU7Ci0gICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSA9IG5ld1RpbWU7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNT
KQotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8qIG9wZW5lciA9IGZyYW1lLT5sb2FkZXIoKS5vcGVuZXIoKSkgewotICAgICAgICAgICAg
aWYgKGF1dG8qIG9wZW5lckRvY3VtZW50ID0gb3BlbmVyLT5kb2N1bWVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckZyYW1lID0gb3BlbmVyRG9jdW1lbnQtPmZyYW1lKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gb3BlbmVyUGFnZUlEID0gb3BlbmVyRnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLnBhZ2VJRCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihkb2N1bWVudC5zZXNzaW9uSUQoKSwgdG9w
RnJhbWVEb21haW4sIG9wZW5lclBhZ2VJRC52YWx1ZSgpLCAqb3BlbmVyRG9jdW1lbnQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFdlIG5vdGlmeSByaWdodCBhd2F5IGluIGNhc2Ugb2YgYSB1c2VyIGludGVyYWN0aW9uIGluc3Rl
YWQgb2Ygd2FpdGluZyB0aGUgdXN1YWwgNSBzZWNvbmRzIGJlY2F1c2Ugd2Ugd2FudAotICAgIC8v
IHRvIHVwZGF0ZSBjb29raWUgYmxvY2tpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4K
LSAgICBtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKGRvY3VtZW50LnNl
c3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmIChzaG91
bGRMb2dVc2VySW50ZXJhY3Rpb24oKSkgewotICAgICAgICBhdXRvIGNvdW50ZXIgPSArK21fbG9n
Z2luZ0NvdW50ZXI7Ci0jZGVmaW5lIExPQ0FMX0xPRyhzdHIsIC4uLikgXAotICAgICAgICBSRUxF
QVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1VzZXJJbnRlcmFjdGlvbjogY291bnRlciA9ICUiIFBSSXU2NCAiOiAiIHN0ciwgY291bnRlciwg
IyNfX1ZBX0FSR1NfXykKLQotICAgICAgICBhdXRvIGVzY2FwZUZvckpTT04gPSBbXShTdHJpbmcg
cykgewotICAgICAgICAgICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFjZSgnIicsICJc
XFwiIik7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBl
c2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwotICAgICAgICBhdXRvIGVz
Y2FwZWREb21haW4gPSBlc2NhcGVGb3JKU09OKHRvcEZyYW1lRG9tYWluLnN0cmluZygpKTsKLQot
ICAgICAgICBMT0NBTF9MT0coUiIoeyAidXJsIjogIiV7cHVibGljfXMiLCkiLCBlc2NhcGVkVVJM
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBMT0NBTF9MT0coUiIoICAiZG9tYWluIiA6ICIle3B1
YmxpY31zIiwpIiwgZXNjYXBlZERvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgTE9DQUxf
TE9HKFIiKCAgInVudGlsIiA6ICVmIH0pIiwgbmV3VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNl
Y29uZHMoKSk7Ci0KLSN1bmRlZiBMT0NBTF9MT0cKLSAgICB9Ci0jZW5kaWYKLX0KLQotI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVy
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
UGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpCi17
Ci0gICAgYXV0byBvcGVuZXJVcmwgPSBvcGVuZXJEb2N1bWVudC51cmwoKTsKLSAgICBSZWdpc3Ry
YWJsZURvbWFpbiBvcGVuZXJEb21haW4geyBvcGVuZXJVcmwgfTsKLSAgICBpZiAoZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbgotICAgICAgICAmJiAhb3BlbmVyRG9j
dW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJh
Y3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKQotICAgICAgICAmJiAhZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3RyaW5nKCksIFdURjo6YmxhbmtVUkwoKSkpIHsKLSAg
ICAgICAgbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2soc2Vzc2lvbklE
LCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9tYWlu
KTsKLSAgICAgICAgLy8gUmVtZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCByZXF1ZXN0cyBz
aW5jZSB0aGV5IGRvbid0IG5lZWQgdG8gYmUgcmVwZWF0ZWQuCi0gICAgICAgIG9wZW5lckRvY3Vt
ZW50LnNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVy
YWN0aW9uKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7Ci0gICAgfQotfQotI2VuZGlmCi0K
LXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpCi17Ci0j
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVu
dC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBy
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50
LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7Ci0gICAgaWYgKCFsb2FkU3RhdHVzKSB7Ci0gICAgICAg
IGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9Mb2FkLmFkZChmYW1pbHlOYW1lKS5pc05ld0Vu
dHJ5KQotICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGlzdGljcy5mb250c1N1Y2Nlc3NmdWxseUxv
YWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNob3VsZENhbGxO
b3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWlu
IG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwo
KSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hB
Y2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5p
c05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVl
OwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVk
dWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3Vt
ZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmFtaWx5TmFtZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGxv
YWRTdGF0dXMpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9ic2VydmVyOjps
b2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBSZXNvdXJjZUxv
YWRPYnNlcnZlciomIHNoYXJlZE9ic2VydmVyKCkKIHsKLSNpZiBFTkFCTEUoV0VCX0FQSV9TVEFU
SVNUSUNTKQotICAgIGlmICghc2hvdWxkTG9nKGRvY3VtZW50LnNlc3Npb25JRCgpKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudXJsKCkgfTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHJlZ2lzdHJh
YmxlRG9tYWluKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3RyYWJsZURv
bWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKLSAgICBzdGF0aXN0aWNzLmNh
bnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKLSAgICBpZiAoc3RhdGlzdGlj
cy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElzLmFkZChtYWlu
RnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAgICAgICAgc2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZG9j
dW1lbnQpOwotI2VuZGlmCisgICAgc3RhdGljIFJlc291cmNlTG9hZE9ic2VydmVyKiBvYnNlcnZl
ciA9IG51bGxwdHI7CisgICAgcmV0dXJuIG9ic2VydmVyOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pCi17Ci0jaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRv
Y3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFi
bGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFs
c2U7Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBk
b2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgpIH07Ci0gICAgaWYgKHN0YXRpc3RpY3MuY2FudmFz
QWN0aXZpdHlSZWNvcmQucmVjb3JkV3JpdHRlbk9yTWVhc3VyZWRUZXh0KHRleHRXcml0dGVuKSkK
LSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElz
LmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAgICBpZiAoc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrKQotICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlv
bklmTmVlZGVkKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHRXcml0dGVuKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkgZnVuY3Rpb25O
YW1lKQotewotI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRM
b2coZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFi
bGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3Vs
ZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5u
YXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAg
ICAgIHN0YXRpc3RpY3MubmF2aWdhdG9yRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFt
ZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAg
fQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1l
UmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9u
Q2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25O
YW1lKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nU2Ny
ZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkgZnVuY3Rpb25OYW1lKQotewotI2lmIEVOQUJMRShXRUJf
QVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQuc2Vzc2lvbklEKCkp
KQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21h
aW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5zY3JlZW5GdW5jdGlvbnNBY2Nlc3NlZC5j
b250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAgICAgIHN0YXRpc3RpY3Muc2NyZWVuRnVuY3Rp
b25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmlj
YXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5G
cmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9Owot
ICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3Nl
ZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0Vu
dHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAg
IGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90
aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsK
LSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAgIAotUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHNlc3Np
b25JRCwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIYXNoTWFwPFJlZ2lzdHJhYmxl
RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4oKTsKLSAgICB9KTsKLQotICAgIGF1dG8g
YWRkRG9tYWluUmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZW5zdXJlKGRvbWFp
biwgWyZkb21haW5dIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9t
YWluKTsKLSAgICB9KTsKLSAgICByZXR1cm4gYWRkRG9tYWluUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2hhcmVkT2JzZXJ2ZXIoKSk7CisgICAgc2hhcmVkT2Jz
ZXJ2ZXIoKSA9ICZvYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2spOwotICAgIGlmIChtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX25vdGlmaWNhdGlvblRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1pbmltdW1Ob3RpZmlj
YXRpb25JbnRlcnZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnVwZGF0ZUNl
bnRyYWxTdGF0aXN0aWNzU3RvcmUoKQotewotICAgIEFTU0VSVChtX25vdGlmaWNhdGlvbkNhbGxi
YWNrKTsKLSAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKLSAgICBtX25vdGlmaWNhdGlv
bkNhbGxiYWNrKHRha2VTdGF0aXN0aWNzKCkpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBV
UkwmIHVybCkKLXsKLSAgICBhdXRvKiByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbiA9IG1fcGVy
U2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5nZXQoc2Vzc2lvbklEKTsKLSAgICBpZiAoIXJl
c291cmNlU3RhdGlzdGljc0J5RG9tYWluKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LQotICAgIGF1dG8gaXRlciA9IHJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluLT5maW5kKFJlZ2lz
dHJhYmxlRG9tYWluIHsgdXJsIH0pOwotICAgIGlmIChpdGVyID09IHJlc291cmNlU3RhdGlzdGlj
c0J5RG9tYWluLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0KLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiU3RhdGlzdGljcyBmb3IgIiwgdXJsLmhvc3QoKS50b1N0cmluZygp
LCAiOlxuIiwgaXRlci0+dmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLWF1dG8gUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKCkgLT4gUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEK
LXsKLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSBwZXJTZXNzaW9uU3RhdGlzdGljczsK
LQotICAgIGZvciAoYXV0byYgaXRlciA6IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01h
cCkgewotICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3RhdGlzdGljczsK
LSAgICAgICAgc3RhdGlzdGljcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZXIudmFsdWUtPnNp
emUoKSk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBpdGVyLnZhbHVlLT52YWx1
ZXMoKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoc3Rh
dGlzdGljKSk7Ci0KLSAgICAgICAgcGVyU2Vzc2lvblN0YXRpc3RpY3MuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGl0ZXIua2V5LCBXVEZNb3ZlKHN0YXRpc3RpY3MpKSk7Ci0gICAgfQotICAgIAotICAg
IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAgIHJldHVybiBw
ZXJTZXNzaW9uU3RhdGlzdGljczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6Y2xl
YXJTdGF0ZSgpCi17Ci0gICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgbV9wZXJT
ZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9sYXN0UmVwb3J0ZWRV
c2VySW50ZXJhY3Rpb25NYXAuY2xlYXIoKTsKLX0KLQotVVJMIFJlc291cmNlTG9hZE9ic2VydmVy
Ojpub25OdWxsT3duZXJVUkwoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAorUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKQogewotICAgIGF1
dG8gdXJsID0gZG9jdW1lbnQudXJsKCk7Ci0gICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFt
ZSgpOwotICAgIGF1dG8gaG9zdCA9IGRvY3VtZW50LnVybCgpLmhvc3QoKTsKLQotICAgIHdoaWxl
ICgoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkgJiYgZnJhbWUgJiYgIWZyYW1lLT5p
c01haW5GcmFtZSgpKSB7Ci0gICAgICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGZyYW1lLT5vd25l
ckVsZW1lbnQoKTsKLQotICAgICAgICBBU1NFUlQob3duZXJFbGVtZW50ICE9IG51bGxwdHIpOwot
ICAgICAgICAKLSAgICAgICAgYXV0byYgZG9jID0gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpOwot
ICAgICAgICBmcmFtZSA9IGRvYy5mcmFtZSgpOwotICAgICAgICB1cmwgPSBkb2MudXJsKCk7Ci0g
ICAgICAgIGhvc3QgPSB1cmwuaG9zdCgpOwotICAgIH0KLQotICAgIHJldHVybiB1cmw7CisgICAg
aWYgKCFzaGFyZWRPYnNlcnZlcigpKQorICAgICAgICBzaGFyZWRPYnNlcnZlcigpID0gbmV3IFJl
c291cmNlTG9hZE9ic2VydmVyOworICAgIHJldHVybiAqc2hhcmVkT2JzZXJ2ZXIoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaAppbmRleCA3NTcxZjE2NzUzMWY3MTlmNzY5YTYwZmVkZmQ2MmQ0NDczNmVh
N2I1Li44ODI4MGE5ZjE5OWM3ZGQwOGE1NjcxNDYyZDc5NWVkODRmYzdkNDI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjUsOTEgKzI1LDQx
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2FudmFzQWN0aXZpdHlSZWNvcmQuaCIK
LSNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRp
c3RpY3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgTG9jazsKLWNsYXNzIFdvcmtRdWV1ZTsKLWNs
YXNzIFdhbGxUaW1lOwotfQorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFBhZ2U7Ci1j
bGFzcyBSZWdpc3RyYWJsZURvbWFpbjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKIGNsYXNzIFJl
c291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi1zdHJ1Y3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgewot
ICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9hZE9ic2VydmVy
PjsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpTZXNzaW9uSUQs
IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkKCk7Ci0KLSAgICB2b2lkIGxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVx
dWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgdm9p
ZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJMLCBjb25zdCBVUkwmIG1h
aW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
V2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYpOworICAg
IAorICAgIHZpcnR1YWwgflJlc291cmNlTG9hZE9ic2VydmVyKCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiAvKiBuZXdSZXF1ZXN0ICovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiAvKiByZWRp
cmVjdFJlc3BvbnNlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nV2ViU29ja2V0TG9hZGlu
Zyhjb25zdCBVUkwmIC8qIHRhcmdldFVSTCAqLywgY29uc3QgVVJMJiAvKiBtYWluRnJhbWVVUkwg
Ki8sIFBBTDo6U2Vzc2lvbklEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0
aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBsb2dGb250TG9hZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgLyog
ZmFtaWx5TmFtZSAqLywgYm9vbCAvKiBsb2FkU3RhdHVzICovKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgbG9nQ2FudmFzUmVhZChjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBs
b2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgLyog
dGV4dFdyaXR0ZW4gKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2dOYXZpZ2F0b3JBUElBY2Nl
c3NlZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmln
YXRvckFQSSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0
IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFVSTCYpIHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDZW50cmFs
U3RhdGlzdGljc1N0b3JlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3RhdGUoKSB7IH0K
ICAgICAKLSAgICB2b2lkIGxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgU3RyaW5n
JiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpOwotICAgIHZvaWQgbG9nQ2FudmFzUmVhZChj
b25zdCBEb2N1bWVudCYpOwotICAgIHZvaWQgbG9nQ2FudmFzV3JpdGVPck1lYXN1cmUoY29uc3Qg
RG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHRleHRXcml0dGVuKTsKLSAgICB2b2lkIGxvZ05hdmln
YXRvckFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6TmF2aWdhdG9yQVBJKTsKLSAgICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vzc2VkKGNvbnN0
IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKTsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yVVJMKFBBTDo6U2Vzc2lvbklE
LCBjb25zdCBVUkwmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhdGlzdGljc1Vw
ZGF0ZWRDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBlclNlc3Npb25SZXNvdXJjZUxvYWREYXRhJiYp
PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlcXVlc3RTdG9yYWdlQWNjZXNzVW5k
ZXJPcGVuZXJDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIFBhZ2VJZGVudGlmaWVyLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ1VzZXJJbnRlcmFjdGlvbk5vdGlm
aWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJik+JiYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVDZW50
cmFsU3RhdGlzdGljc1N0b3JlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclN0YXRl
KCk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAmJiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICBib29sIHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uOyB9Ci0gICAgdm9pZCBzZXRTaG91bGRM
b2dVc2VySW50ZXJhY3Rpb24oYm9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24pIHsgbV9zaG91
bGRMb2dVc2VySW50ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247IH0KLSNlbmRp
ZgotCi1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZE9ic2VydmVyKCk7Ci0KLSAgICBib29sIHNo
b3VsZExvZyhQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzY2hlZHVsZU5vdGlm
aWNhdGlvbklmTmVlZGVkKCk7Ci0KLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSB0YWtl
U3RhdGlzdGljcygpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAg
ICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIFBhZ2VJ
ZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgRG9jdW1lbnQmIG9wZW5lckRvY3VtZW50KTsKLSNlbmRp
ZgotCi0gICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8
UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Pj4gbV9wZXJTZXNzaW9u
UmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotICAgIEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFdU
Rjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwotICAgIEZ1bmN0
aW9uPHZvaWQoUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEpPiBtX25vdGlmaWNhdGlvbkNhbGxi
YWNrOwotICAgIEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgUGFnZUlkZW50aWZpZXIsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fcmVx
dWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrOwotICAgIEZ1bmN0aW9uPHZvaWQo
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fbG9nVXNlckludGVy
YWN0aW9uTm90aWZpY2F0aW9uQ2FsbGJhY2s7Ci0KLSAgICBUaW1lciBtX25vdGlmaWNhdGlvblRp
bWVyOwotCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykgJiYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgdWludDY0X3QgbV9sb2dnaW5nQ291bnRlciB7IDAgfTsKLSAgICBi
b29sIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpIHsgfQogI2VuZGlmCi0KLSAgICBV
Ukwgbm9uTnVsbE93bmVyVVJMKGNvbnN0IERvY3VtZW50JikgY29uc3Q7CiB9OwogICAgIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXBy
ZWNhdGVkR2xvYmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVwcmVjYXRlZEds
b2JhbFNldHRpbmdzLmgKaW5kZXggNjIwZDEyYTE4YWVmOTJhNjJkNWZjNzRhN2MzYWFiN2E5NzZl
Nzk0NC4uNzg1OTlmODkzNzhlNjQ4NWE5NDhlOGRiOGJiNjdkNTJkY2I4ZGM4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oCkBAIC0xMzQsNyAr
MTM0LDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnTWFuYWdl
QXVkaW9TZXNzaW9uOwogCiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZl
clNpemVFbmFibGVkOwotICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZEVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWxsb3dzQW55U1NM
Q2VydGlmaWNhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGFjM2Ey
MWExZDQ3OGU2NWIyNDFmNjUzODMzYjU5YjlmZjQ1M2Q0MTEuLjQ4MTNlNzg2NDI5MGMzZDZkYTU3
Njc3Mjc3ODdlYWRhMzE5NzljMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC02
OTYsNyArNjk2LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bG9nVXNl
ckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICAgICB9CiB9CiAKLXZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRh
dGVkKFJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmIHN0
YXRpc3RpY3MpCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVXBkYXRlZChXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6UGVyU2Vzc2lvblJl
c291cmNlTG9hZERhdGEmJiBzdGF0aXN0aWNzKQogewogICAgIGZvciAoYXV0byYgaXRlciA6IHN0
YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gbmV0d29ya1By
b2Nlc3MoKS5uZXR3b3JrU2Vzc2lvbihpdGVyLmZpcnN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCmluZGV4IDQyYzE3ZTFiMDViNDA2YjM5NGM5NTRhYjc5YzJhMzg2NDk5MjQxMzQuLjA5YjZh
MzUxODJkNTM3N2FmOGZkZjc4ZGZkYzhjMWU1YWE3YTQ2NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUlRDUHJvdmlkZXIuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkTWFwLmgiCiAjaW5jbHVkZSAiV2ViUGF5bWVu
dENvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVzc2Fn
ZVBvcnRJZGVudGlmaWVyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
IG5hbWVzcGFjZSBQQUwgewpAQCAtMjM1LDcgKzIzNSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGVhclBhZ2VTcGVjaWZpY0RhdGFGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFBBTDo6U2Vzc2lv
bklELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGxvZ1VzZXJJbnRlcmFj
dGlvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lk
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2Vy
dmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKKyAgICB2b2lkIHJlc291cmNlTG9h
ZFN0YXRpc3RpY3NVcGRhdGVkKFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSYmKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoUEFMOjpTZXNzaW9u
SUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdl
YkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsK
ICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKFBBTDo6U2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlE
LCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApp
bmRleCAzMTNlYzBhZjNiN2Y2MmJmYzc1ZWU5YmU4YzhlOWJmODkwNDg1NzU0Li4zMjE0ODZiMGY2
YzFjNDFkZThmNjUyY2I2MDE3NWE0MTY0NTYwMjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTU1Myw2ICs1
NTMsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNwcAogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAKK1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
VXNlck1lZGlhQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTcGVlY2hT
eW50aGVzaXNDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAyNGE0M2ZiNzFhZWM4NTYzMTUyMDkzZDEwOTc4ZDA4MjYxZDkw
Y2U3Li44OTA2MGZjNTIwODJlMWI5MjJhMWQ0YzBmNDc1MmUxZWM4ZDk3ZmExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkxMCw2ICs5
MTAsNyBAQAogCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRhdGlvbkFjY2Vz
c0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDY1N0Q4ODgyMjY2NEExQTAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NBbGVydC5tbSAq
LzsgfTsKIAkJNDY1RjRFMDYyMzBCMkU5NTAwM0NFREI3IC8qIFN0b3JhZ2VOYW1lc3BhY2VJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NjVGNEUwNTIzMEIyRTdDMDAzQ0VEQjcgLyogU3RvcmFnZU5hbWVzcGFjZUlkZW50aWZpZXIuaCAq
LzsgfTsKIAkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4dE1hbmFnZXJD
b25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rp
b24uaCAqLzsgfTsKKwkJNDY3MUZGMUYyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCAq
LzsgfTsKIAkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NjdFNDNFNzIyNDNGRjZEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9yZVBhcmFtZXRl
cnMuaCAqLzsgfTsKIAkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9j
ZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tncm91bmRQcm9j
ZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQk0NkIwNTI0NzIyNjY4RDg1MDAyNjVC
OTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkIwNTI0NDIyNjY4
RDIzMDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9s
bGVyLmggKi87IH07CkBAIC0zMjE4LDYgKzMyMTksOCBAQAogCQk0NjZCQzAzODFGQTI2NkM5MDAy
RkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEg
LyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDY2QkMwM0ExRkEyNjZDOTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY3MUZGMUUyMzIxN0VGRjAwMUI2NEM3IC8qIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlJlc291cmNl
TG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY3RTQzRTcy
MjQzRkY2RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM1NjlBMjFFODFDQzcwMDZFMjdB
MyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcm92aXNpb25hbFBhZ2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvdmlzaW9uYWxQYWdlUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNCw2ICs3NjI3LDggQEAKIAkJ
CQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8sCiAJCQkJMUEx
RTA5MzExODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAgKi8s
CiAJCQkJMUExRTA5MzIxODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVu
dC5oICovLAorCQkJCTQ2NzFGRjFFMjMyMTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5jcHAgKi8sCisJCQkJNDY3MUZGMUQyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJlc291
cmNlTG9hZE9ic2VydmVyLmggKi8sCiAJCQkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlNlYXJjaFBvcHVwTWVudS5jcHAgKi8sCiAJCQkJRDNCOTQ4NDUxMUZGNEI2NTAwMDMyQjM5IC8q
IFdlYlNlYXJjaFBvcHVwTWVudS5oICovLAogCQkJCUMxNDkzODAzMjIzNDFERjcwMDBDRDcwNyAv
KiBXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwICovLApAQCAtOTk5MCw4ICs5OTk1LDEwIEBA
CiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwNDE1MEMzNTA2MDBFNTJDRTkgLyogV2ViUmVu
ZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjA4ODFGMTUwNDEzRTkwMEZDODJDNyAv
KiBXZWJSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1ODYwRTcxMjMwRjY3RkMw
MDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMEFGRkJBMTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFCIC8qIFdlYlJlc291cmNl
TG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2NzFGRjFGMjMyMTdFRkYwMDFC
NjRDNyAvKiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FG
QkQzNjMyMUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzMDc1QjAxREU4NUY1ODAwMzlFQzY5IC8qIFdlYlJUQ01v
bml0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkFGNUY1MUUzQzA2NDkwMDFBRTY3OCAvKiBX
ZWJSVENSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDIwNyw3ICsxMDIxNCw2IEBACiAJ
CQkJMEYzQzcyNUIxOTZGNjA0RTAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxpZ2h0Vmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0MjkzQTQxOTVBNDNEQTAwMjc4MkM3IC8qIFdLSW5zcGVj
dG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUU4
NDlDODEzNjhEOTM5MDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3VyY2VJbnRlcmNl
cHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTRCQURGNDFGN0Q3ODE0MDBCNTcx
RTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUx
OEI1RDIxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyREQ1RTEyOTIxMEFEQzdCMDBEQjYwMTIgLyogV0tLZXlib2FyZFNjcm9sbGlu
Z0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA1ZjE5Y2MyOTA2YWNmODZhOWY2YzdlMmYyNDk2ZDhmMzg4ZmMx
N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMzg5IEBACisvKgor
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgor
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgor
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgU2Vjb25kcyBtaW5p
bXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwgeyA1X3MgfTsKKworc3RhdGljIGJvb2wgaXMzeHhSZWRp
cmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KSA8PSAzOTk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYgIXNlc3Npb25J
RC5pc0VwaGVtZXJhbCgpOworfQorCitXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6V2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIoKQorICAgIDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJldlYlJl
c291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQoreworfQor
Cit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlE
LCBEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpCit7CisgICAgYXV0byBvcGVuZXJVcmwgPSBvcGVu
ZXJEb2N1bWVudC51cmwoKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBvcGVuZXJEb21haW4geyBv
cGVuZXJVcmwgfTsKKyAgICBpZiAoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5l
ckRvbWFpbgorICAgICAgICAmJiAhb3BlbmVyRG9jdW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNwZWNp
ZmljU3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3Ry
aW5nKCksIFdURjo6YmxhbmtVUkwoKSkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKHNlc3Npb25JRCwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBvcGVu
ZXJQYWdlSUQsIG9wZW5lckRvbWFpbiksIDApOworICAgICAgICAKKyAgICAgICAgLy8gUmVtZW1i
ZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCByZXF1ZXN0cyBzaW5jZSB0aGV5IGRvbid0IG5lZWQg
dG8gYmUgcmVwZWF0ZWQuCisgICAgICAgIG9wZW5lckRvY3VtZW50LnNldEhhc1JlcXVlc3RlZFBh
Z2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2Vzcyk7CisgICAgfQorfQorICAgIAorUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYg
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGVyU2Vzc2lvblJlc291
cmNlU3RhdGlzdGljc01hcC5lbnN1cmUoc2Vzc2lvbklELCBbXSB7CisgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+PigpOworICAgIH0pOworCisgICAgYXV0byBhZGREb21haW5SZXN1bHQgPSBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5lbnN1cmUoZG9tYWluLCBbJmRvbWFpbl0geworICAgICAgICByZXR1
cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb21haW4pOworICAgIH0pOworICAgIHJldHVybiBh
ZGREb21haW5SZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFdlYlJlc291cmNlTG9h
ZE9ic2VydmVyOjpzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9w
ZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBtX25v
dGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9ub3RpZmljYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX25vdGlmaWNhdGlv
blRpbWVyLnN0YXJ0T25lU2hvdChtaW5pbXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwpOworfQorCit2
b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3Jl
KCkKK3sKKyAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCku
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NVcGRhdGVkKHRha2VTdGF0aXN0aWNzKCkpLCAwKTsKK30KKworU3RyaW5nIFdl
YlJlc291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byogcmVzb3VyY2VTdGF0aXN0aWNz
QnlEb21haW4gPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0KHNlc3Npb25J
RCk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbikKKyAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisKKyAgICBhdXRvIGl0ZXIgPSByZXNvdXJjZVN0YXRpc3RpY3NCeURv
bWFpbi0+ZmluZChSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9KTsKKyAgICBpZiAoaXRlciA9PSBy
ZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbi0+ZW5kKCkpCisgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlN0YXRpc3RpY3MgZm9yICIsIHVybC5o
b3N0KCkudG9TdHJpbmcoKSwgIjpcbiIsIGl0ZXItPnZhbHVlLnRvU3RyaW5nKCkpOworfQorCith
dXRvIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp0YWtlU3RhdGlzdGljcygpIC0+IFBlclNlc3Np
b25SZXNvdXJjZUxvYWREYXRhCit7CisgICAgUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEgcGVy
U2Vzc2lvblN0YXRpc3RpY3M7CisKKyAgICBmb3IgKGF1dG8mIGl0ZXIgOiBtX3BlclNlc3Npb25S
ZXNvdXJjZVN0YXRpc3RpY3NNYXApIHsKKyAgICAgICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+IHN0YXRpc3RpY3M7CisgICAgICAgIHN0YXRpc3RpY3MucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShpdGVyLnZhbHVlLT5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYgc3RhdGlzdGlj
IDogaXRlci52YWx1ZS0+dmFsdWVzKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNzLnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOworCisgICAgICAgIHBlclNlc3Npb25TdGF0aXN0
aWNzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpdGVyLmtleSwgV1RGTW92ZShzdGF0aXN0aWNzKSkp
OworICAgIH0KKyAgICAKKyAgICBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuY2xl
YXIoKTsKKyAgICByZXR1cm4gcGVyU2Vzc2lvblN0YXRpc3RpY3M7Cit9CisKK3ZvaWQgV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyU3RhdGUoKQoreworICAgIG1fbm90aWZpY2F0aW9uVGlt
ZXIuc3RvcCgpOworICAgIG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigp
OworICAgIG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLmNsZWFyKCk7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpCit7Cisj
aWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgp
IH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOwor
ICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYg
KCFsb2FkU3RhdHVzKSB7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9Mb2Fk
LmFkZChmYW1pbHlOYW1lKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdGlz
dGljcy5mb250c1N1Y2Nlc3NmdWxseUxvYWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkK
KyAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisgICAg
fQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1l
UmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9u
Q2FsbGJhY2spCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZmFtaWx5TmFt
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGxvYWRTdGF0dXMpOworI2VuZGlmCit9CisgICAgCit2b2lk
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50JiBk
b2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAgIGlmICghc2hv
dWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluIHsg
ZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHJlZ2lz
dHJhYmxlRG9tYWluKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3RyYWJs
ZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBzdGF0aXN0aWNz
LmNhbnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGlz
dGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElzLmFkZCht
YWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKKyAgICAgICAg
c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
ZG9jdW1lbnQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z0NhbnZhc1dyaXRlT3JNZWFzdXJlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB0ZXh0V3JpdHRlbikKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IGlmICghc2hvdWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5zZXNzaW9uSUQo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxl
RG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklE
LCByZWdpc3RyYWJsZURvbWFpbik7CisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2Fs
bGJhY2sgPSBmYWxzZTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdpc3RyYWJs
ZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBpZiAoc3RhdGlz
dGljcy5jYW52YXNBY3Rpdml0eVJlY29yZC5yZWNvcmRXcml0dGVuT3JNZWFzdXJlZFRleHQodGV4
dFdyaXR0ZW4pKQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVl
OworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nl
c3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05l
d0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwor
ICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIHNjaGVkdWxl
Tm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50
KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFdyaXR0ZW4pOworI2VuZGlmCit9CisgICAgCit2b2lk
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dOYXZpZ2F0b3JBUElBY2Nlc3NlZChjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmlnYXRv
ckFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAg
ICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lvbklE
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJs
ZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25J
RCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNh
bGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLm5hdmlnYXRvckZ1bmN0aW9uc0Fj
Y2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlzdGljcy5uYXZp
Z2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVnaXN0cmFibGVE
b21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgp
LnVybCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURvbWFpbnNX
aGljaEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4uc3RyaW5n
KCkpLmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9
IHRydWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAg
c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
ZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCit9Cisg
ICAgCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElBY2Nlc3NlZChj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OlNj
cmVlbkFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykK
KyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lv
bklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3Ry
YWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Np
b25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLnNjcmVlbkZ1bmN0aW9uc0Fj
Y2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlzdGljcy5zY3Jl
ZW5GdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgc2hvdWxkQ2Fs
bE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVnaXN0cmFibGVEb21h
aW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgpLnVy
bCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURvbWFpbnNXaGlj
aEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkp
LmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRy
dWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAgICAgICAgc2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZG9j
dW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBG
cmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlQoZnJhbWUtPnBh
Z2UoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UgfHwgIXNob3VsZExvZ1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MocGFnZS0+c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBib29sIGlzUmVkaXJlY3QgPSBpczN4eFJlZGlyZWN0KHJlZGlyZWN0UmVzcG9uc2UpOworICAg
IGNvbnN0IFVSTCYgcmVkaXJlY3RlZEZyb21VUkwgPSByZWRpcmVjdFJlc3BvbnNlLnVybCgpOwor
ICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0gbmV3UmVxdWVzdC51cmwoKTsKKyAgICBjb25zdCBV
UkwmIHRvcEZyYW1lVVJMID0gZnJhbWUgPyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+
dXJsKCkgOiBVUkwoKTsKKyAgICAKKyAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJnZXRVUkwuaG9z
dCgpOworICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gdG9wRnJhbWVVUkwuaG9zdCgpOworCisgICAg
aWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IHRvcEZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFy
Z2V0SG9zdCA9PSB0b3BGcmFtZUhvc3QgfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCA9PSBy
ZWRpcmVjdGVkRnJvbVVSTC5ob3N0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3Ry
YWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdpc3RyYWJsZURv
bWFpbiB0b3BGcmFtZURvbWFpbiB7IHRvcEZyYW1lVVJMIH07CisgICAgUmVnaXN0cmFibGVEb21h
aW4gcmVkaXJlY3RlZEZyb21Eb21haW4geyByZWRpcmVjdGVkRnJvbVVSTCB9OworCisgICAgaWYg
KHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbiB8fCAoaXNSZWRpcmVjdCAmJiB0YXJnZXRE
b21haW4gPT0gcmVkaXJlY3RlZEZyb21Eb21haW4pKQorICAgICAgICByZXR1cm47CisKKyAgICB7
CisgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNzaW9uSUQoKSwgdGFyZ2V0RG9tYWluKTsK
KyAgICAgICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRp
bWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisgICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
bGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zLmFkZCh0b3BGcmFtZURvbWFpbik7CisKKyAgICAgICAgc2No
ZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlmIChpc1JlZGlyZWN0
KSB7CisgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCBy
ZWRpcmVjdGVkRnJvbURvbWFpbik7CisgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGlj
cy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXREb21haW4pOworICAgICAg
ICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdldERvbWFpbik7CisgICAgICAg
IHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmFkZChyZWRp
cmVjdGVkRnJvbURvbWFpbik7CisKKyAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRl
ZCgpOworICAgIH0KK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBVUkwmIHRhcmdldFVSTCwgY29uc3QgVVJMJiBtYWluRnJhbWVVUkws
IFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNl
TG9hZFN0YXRpc3RpY3Moc2Vzc2lvbklEKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0
YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBt
YWluRnJhbWVVUkwuaG9zdCgpOworICAgIAorICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8
fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhvc3Qp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21h
aW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7
IG1haW5GcmFtZVVSTCB9OworCisgICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFp
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisKKyAgICBh
dXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oc2Vzc2lvbklELCB0YXJnZXREb21haW4pOworICAgIHRhcmdldFN0YXRpc3Rp
Y3MubGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsKKworICAgIHNjaGVkdWxl
Tm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1
bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1ZhbGlk
KCkgfHwgIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lvbklE
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB1cmwgPSBkb2N1bWVudC51cmwoKTsK
KyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0xvY2FsRmlsZSgpIHx8IHVy
bC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHRv
cEZyYW1lRG9tYWluIHsgdXJsIH07CisgICAgYXV0byBuZXdUaW1lID0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsKKyAgICBhdXRv
IGxhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbiA9IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0
aW9uTWFwLmdldCh0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKG5ld1RpbWUgPT0gbGFzdFJlcG9y
dGVkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xhc3RSZXBvcnRl
ZFVzZXJJbnRlcmFjdGlvbk1hcC5zZXQodG9wRnJhbWVEb21haW4sIG5ld1RpbWUpOworCisgICAg
YXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7CisgICAgc3RhdGlz
dGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgIHN0YXRpc3RpY3MubGFzdFNlZW4g
PSBuZXdUaW1lOworICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUg
PSBuZXdUaW1lOworCisgICAgaWYgKGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKSkgewor
ICAgICAgICBpZiAoYXV0byogb3BlbmVyID0gZnJhbWUtPmxvYWRlcigpLm9wZW5lcigpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRG9jdW1lbnQgPSBvcGVuZXItPmRvY3VtZW50KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRnJhbWUgPSBvcGVuZXJEb2N1bWVu
dC0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvcGVuZXJQYWdlSUQg
PSBvcGVuZXJGcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkucGFnZUlEKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKGRvY3VtZW50LnNlc3Np
b25JRCgpLCB0b3BGcmFtZURvbWFpbiwgb3BlbmVyUGFnZUlELnZhbHVlKCksICpvcGVuZXJEb2N1
bWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gV2Ugbm90aWZ5IHJpZ2h0IGF3YXkgaW4gY2FzZSBvZiBhIHVzZXIgaW50ZXJh
Y3Rpb24gaW5zdGVhZCBvZiB3YWl0aW5nIHRoZSB1c3VhbCA1IHNlY29uZHMgYmVjYXVzZSB3ZSB3
YW50CisgICAgLy8gdG8gdXBkYXRlIGNvb2tpZSBibG9ja2luZyBzdGF0ZSBhcyBxdWlja2x5IGFz
IHBvc3NpYmxlLgorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6TG9nVXNlckludGVyYWN0aW9uKGRvY3VtZW50LnNlc3Npb25JRCgp
LCB0b3BGcmFtZURvbWFpbiksIDApOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
aWYgKG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIGF1dG8gY291bnRlciA9
ICsrbV9sb2dnaW5nQ291bnRlcjsKKyNkZWZpbmUgTE9DQUxfTE9HKHN0ciwgLi4uKSBcCisgICAg
ICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6bG9nVXNlckludGVyYWN0aW9uOiBjb3VudGVyID0gJSIgUFJJdTY0ICI6ICIgc3RyLCBj
b3VudGVyLCAjI19fVkFfQVJHU19fKQorCisgICAgICAgIGF1dG8gZXNjYXBlRm9ySlNPTiA9IFtd
KFN0cmluZyBzKSB7CisgICAgICAgICAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwiKS5yZXBsYWNl
KCciJywgIlxcXCIiKTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9OworICAgICAg
ICBhdXRvIGVzY2FwZWRVUkwgPSBlc2NhcGVGb3JKU09OKHVybC5zdHJpbmcoKSk7CisgICAgICAg
IGF1dG8gZXNjYXBlZERvbWFpbiA9IGVzY2FwZUZvckpTT04odG9wRnJhbWVEb21haW4uc3RyaW5n
KCkpOworCisgICAgICAgIExPQ0FMX0xPRyhSIih7ICJ1cmwiOiAiJXtwdWJsaWN9cyIsKSIsIGVz
Y2FwZWRVUkwudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPQ0FMX0xPRyhSIiggICJkb21haW4i
IDogIiV7cHVibGljfXMiLCkiLCBlc2NhcGVkRG9tYWluLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBMT0NBTF9MT0coUiIoICAidW50aWwiIDogJWYgfSkiLCBuZXdUaW1lLnNlY29uZHNTaW5jZUVw
b2NoKCkuc2Vjb25kcygpKTsKKworI3VuZGVmIExPQ0FMX0xPRworICAgIH0KKyNlbmRpZgorfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYyMjk2MWVkNGRlMjgxZWZhZGU0ZWY5Yjg3NGY0YTljMTU5MDZjODkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlJlc291cmNlTG9hZE9ic2VydmVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpTZXNzaW9uSUQsIFZlY3RvcjxX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OworCisgICAgV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXIoKTsKKyAgICAKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBX
ZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVz
dCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgZmlu
YWw7CisgICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJMLCBj
b25zdCBVUkwmIG1haW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpIGZpbmFsOworICAgIHZvaWQg
bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBXZWJDb3Jl
OjpEb2N1bWVudCYpIGZpbmFsOworICAgIHZvaWQgbG9nRm9udExvYWQoY29uc3QgV2ViQ29yZTo6
RG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIGJvb2wgbG9hZFN0YXR1cykgZmlu
YWw7CisgICAgdm9pZCBsb2dDYW52YXNSZWFkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JikgZmlu
YWw7CisgICAgdm9pZCBsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBXZWJDb3JlOjpEb2N1
bWVudCYsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pIGZpbmFsOworICAgIHZvaWQgbG9nTmF2
aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkpIGZpbmFsOworICAgIHZvaWQg
bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkpIGZpbmFsOworCisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBzZXRTaG91bGRMb2dVc2VySW50ZXJhY3Rpb24o
Ym9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24pIGZpbmFsIHsgbV9zaG91bGRMb2dVc2VySW50
ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247IH0KKyNlbmRpZgorCisgICAgU3Ry
aW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFVSTCYpIGZpbmFsOwor
ICAgIHZvaWQgdXBkYXRlQ2VudHJhbFN0YXRpc3RpY3NTdG9yZSgpIGZpbmFsOworICAgIHZvaWQg
Y2xlYXJTdGF0ZSgpIGZpbmFsOworCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYpOworICAg
IHZvaWQgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworCisgICAgUGVyU2Vzc2lvblJl
c291cmNlTG9hZERhdGEgdGFrZVN0YXRpc3RpY3MoKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdl
QWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIG9wZW5lclBhZ2VJRCwgV2ViQ29yZTo6RG9jdW1lbnQmIG9wZW5lckRvY3VtZW50KTsK
KworICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIHN0ZDo6dW5pcXVlX3B0cjxIYXNoTWFwPFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Pj4+IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcDsKKyAgICBIYXNoTWFwPFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluLCBXVEY6OldhbGxUaW1lPiBtX2xhc3RSZXBvcnRlZFVzZXJJ
bnRlcmFjdGlvbk1hcDsKKworICAgIFdlYkNvcmU6OlRpbWVyIG1fbm90aWZpY2F0aW9uVGltZXI7
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB1aW50NjRfdCBtX2xvZ2dpbmdDb3Vu
dGVyIHsgMCB9OworICAgIGJvb2wgbV9zaG91bGRMb2dVc2VySW50ZXJhY3Rpb24geyBmYWxzZSB9
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggNjRhZTEyMGY5Yjg5NjZhYzMwM2M1NWQ5NDc5MzQ5ODA3N2I2ZDhjMC4u
MTE1NjE1YTEzNjNmMGZlOGY3YTFlMGM3OWUzN2QyZWIxODExYjIwMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlJlc291
cmNlTG9hZE9ic2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbk1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiV2ViU2VydmljZVdvcmtlclByb3ZpZGVyLmgiCkBAIC0xMTAsNyArMTExLDYg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lz
dHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CkBAIC0yMTcsMTYgKzIxNyw3IEBAIFdlYlByb2Nlc3M6
OldlYlByb2Nlc3MoKQogICAgIG1fcGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzLmFkZChQQUw6
OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBIYXNoTWFwPHVuc2lnbmVkLCBXYWxsVGlt
ZT4oKSk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotICAgIFJlc291
cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5zZXRTdGF0aXN0aWNzVXBkYXRlZENhbGxiYWNrKFt0
aGlzXSAoYXV0byYmIHN0YXRpc3RpY3MpIHsKLSAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXVEZNb3ZlKHN0YXRp
c3RpY3MpKSwgMCk7Ci0gICAgfSk7Ci0KLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVk
KCkuc2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrKFt0aGlzXSAoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pIHsKLSAgICAgICAgZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKHNlc3Np
b25JRCwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBvcGVuZXJQYWdlSUQsIG9wZW5lckRv
bWFpbiksIDApOwotICAgIH0pOwotICAgIAotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFy
ZWQoKS5zZXRMb2dVc2VySW50ZXJhY3Rpb25Ob3RpZmljYXRpb25DYWxsYmFjayhbdGhpc10gKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikg
eyAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvZ1VzZXJJbnRlcmFjdGlv
bihzZXNzaW9uSUQsIGRvbWFpbiksIDApOwotICAgIH0pOworICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzZXRTaGFyZWQoKm5ldyBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcik7CiAjZW5kaWYKICAg
ICAKICAgICBHaWdhY2FnZTo6ZGlzYWJsZURpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSWZTaG91
bGRCZUVuYWJsZWQoKTsKQEAgLTE2NTUsNyArMTY0Niw5IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogCiB2b2lkIFdlYlBy
b2Nlc3M6OmNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpCiB7CisjaWYgRU5BQkxFKFJFU09V
UkNFX0xPQURfU1RBVElTVElDUykKICAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCku
Y2xlYXJTdGF0ZSgpOworI2VuZGlmCiB9CiAKIFJlZlB0cjxBUEk6Ok9iamVjdD4gV2ViUHJvY2Vz
czo6dHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyhBUEk6Ok9iamVjdCogb2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378248</attachid>
            <date>2019-09-06 15:59:20 -0700</date>
            <delta_ts>2019-09-06 16:58:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201517-20190906155919.patch</filename>
            <type>text/plain</type>
            <size>61200</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA3ZWZmM2NmMTk0YTU1
NTM1N2NlNTQ3M2YyMDJhZDUxYTU2ZmNiMy4uODZiM2VkYmU3YTRiYmJhMzBmZjJlMDY0NmMzMjBi
OTI4Y2I0MzQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA5LTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQg
RnVsZ2hhbS4KKworICAgICAgICBNb3ZlIHRoZSBSZXNvdXJjZUxvYWRPYnNlcnZlciBsb2dpYyB0
byBXZWJLaXQyIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IFdlYktpdDEuIFRoaXMgYWxsb3dzIHVz
IHRvIHNpbXBsaWZ5CisgICAgICAgIGNvZGUuCisKKyAgICAgICAgSW4gYSBmb2xsb3ctdXAgcGF0
Y2gsIEkgd2lsbCBzaW1wbGlmeSB0aGUgY29kZSBldmVuIGZ1cnRoZXIgYnkgbGV2ZXJhZ2luZyB0
aGUgZmFjdCB0aGF0IGEgV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIGlzIGFsd2F5cyBhc3Nv
Y2lhdGVkIHdpdGggYSBzaW5nbGUgV2Vic2l0ZURhdGFTdG9yZSAvIHNlc3Npb25JRDoKKyAgICAg
ICAgLSBObyBuZWVkIGZvciBhIEhhc2hNYXAgb2Ygc2Vzc2lvbklEcworICAgICAgICAtIE5vIG5l
ZWQgdG8gZXZlbiBhbGxvY2F0ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgaWYgdGhlIFdlYlBy
b2Nlc3MgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgorCisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
flJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJl
c29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0Zv
bnRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52
YXNSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52
YXNXcml0ZU9yTWVhc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1NjcmVlbkFQSUFjY2Vzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTaG91bGRMb2dVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAqIHBhZ2UvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg6CisKIDIw
MTktMDktMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjQ5MzY3KTogbV9kZWNvZGluZ1Byb21pc2VzIGdyb3dzIGlu
ZGVmaW5pdGVseSB1bnRpbCBJbWFnZUxvYWRlciBkZXN0cnVjdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1ZmYz
M2ZmNjJlZDQyNjMxOGJiY2Q4Y2NhZjIxMjE5NDk4N2Y3OWMxLi5kMTNhNThiN2EzNWQ4YzU4MzU2
MjM3ZTYxYjNjOWMyMWIwZTMyYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTA5
LTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBNb3ZlIHRoZSBSZXNvdXJjZUxvYWRPYnNlcnZl
ciBsb2dpYyB0byBXZWJLaXQyIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IFdlYktpdDEuIFRoaXMg
YWxsb3dzIHVzIHRvIHNpbXBsaWZ5CisgICAgICAgIGNvZGUuCisKKyAgICAgICAgSW4gYSBmb2xs
b3ctdXAgcGF0Y2gsIEkgd2lsbCBzaW1wbGlmeSB0aGUgY29kZSBldmVuIGZ1cnRoZXIgYnkgbGV2
ZXJhZ2luZyB0aGUgZmFjdCB0aGF0IGEgV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIGlzIGFs
d2F5cyBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgV2Vic2l0ZURhdGFTdG9yZSAvIHNlc3Npb25J
RDoKKyAgICAgICAgLSBObyBuZWVkIGZvciBhIEhhc2hNYXAgb2Ygc2Vzc2lvbklEcworICAgICAg
ICAtIE5vIG5lZWQgdG8gZXZlbiBhbGxvY2F0ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgaWYg
dGhlIFdlYlByb2Nlc3MgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAuCisg
ICAgICAgIChXZWJLaXQ6OmlzM3h4UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hvdWxkTG9nIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5k
ZXJPcGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50
cmFsU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6Y2xlYXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpub25OdWxsT3duZXJVUkwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRm9udExvYWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2FudmFzUmVhZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dOYXZpZ2F0b3JBUElBY2Nl
c3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3Jl
ZW5BUElBY2Nlc3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNv
bHV0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZE9ic2VydmVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisKIDIwMTktMDktMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBEZXByZWNhdGUgYWxsIFdLQ29va2llTWFuYWdlclJlZiBmdW5jdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggODljNWM2ZDJmMjIwOTc3NTBmNmNjOGM5MTM5NDQ3
ZDJkY2VhNDhhNi4uYjU0MTA2MmRjZmRjY2RiZDE3M2VmMzYyNzgzOTdkM2M1ZjYxMjgyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTE0OTEsOCArMTQ5MSw4IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBib29sIGhhc1JlcXVl
c3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzZXRIYXNSZXF1ZXN0ZWRQYWdlU3BlY2lmaWNT
dG9yYWdlQWNjZXNzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFn
ZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VB
Y2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB3YXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVu
dFJlc291cmNlKCk7CiAgICAgdm9pZCBkb3duZ3JhZGVSZWZlcnJlclRvUmVnaXN0cmFibGVEb21h
aW4oKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAKaW5kZXggOWNiMzE2ZTlkMTY2ZjY3Y2I3NjYxZGNmZTI3M2E2NjY1MzFmZjU2Yi4u
YmVkN2NhNDI4MThjOGY1NGQyMGFiYjhkYzAyY2FhNDBhMTliOTgxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0yNiw0MTQgKzI2LDI1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1Ob3RpZmljYXRpb25JbnRl
cnZhbCB7IDVfcyB9OwotCi1SZXNvdXJjZUxvYWRPYnNlcnZlcjo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXIoKQotICAgIDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJlJlc291cmNlTG9hZE9ic2Vy
dmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQotewotfQotCi1SZXNvdXJjZUxvYWRP
YnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlc291cmNlTG9hZE9ic2VydmVyPiByZXNvdXJjZUxvYWRPYnNlcnZlcjsK
LSAgICByZXR1cm4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNldFN0YXRpc3RpY3NVcGRhdGVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKLXsKLSAg
ICBBU1NFUlQoIW1fbm90aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIG1fbm90aWZpY2F0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNr
KEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVu
ZXJQYWdlSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pPiYmIGNhbGxi
YWNrKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2Fs
bGJhY2spOwotICAgIG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldExv
Z1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYgY2FsbGJhY2spCi17Ci0gICAg
QVNTRVJUKCFtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLSAgICBt
X2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayk7Ci19Ci0gICAgCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSA+PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAzOTk7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
JiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQotewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLQotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAg
IGlmICghcGFnZSB8fCAhc2hvdWxkTG9nKHBhZ2UtPnNlc3Npb25JRCgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3Bv
bnNlKTsKLSAgICBjb25zdCBVUkwmIHJlZGlyZWN0ZWRGcm9tVVJMID0gcmVkaXJlY3RSZXNwb25z
ZS51cmwoKTsKLSAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3QudXJsKCk7Ci0g
ICAgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRv
Y3VtZW50KCktPnVybCgpIDogVVJMKCk7Ci0gICAgCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFy
Z2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHRvcEZyYW1lVVJMLmhvc3Qo
KTsKLQotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCB0b3BGcmFtZUhvc3QuaXNFbXB0
eSgpIHx8IHRhcmdldEhvc3QgPT0gdG9wRnJhbWVIb3N0IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdl
dEhvc3QgPT0gcmVkaXJlY3RlZEZyb21VUkwuaG9zdCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVnaXN0cmFibGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07Ci0gICAgUmVn
aXN0cmFibGVEb21haW4gdG9wRnJhbWVEb21haW4geyB0b3BGcmFtZVVSTCB9OwotICAgIFJlZ2lz
dHJhYmxlRG9tYWluIHJlZGlyZWN0ZWRGcm9tRG9tYWluIHsgcmVkaXJlY3RlZEZyb21VUkwgfTsK
LQotICAgIGlmICh0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW4gfHwgKGlzUmVkaXJlY3Qg
JiYgdGFyZ2V0RG9tYWluID09IHJlZGlyZWN0ZWRGcm9tRG9tYWluKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgewotICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdl
dERvbWFpbik7Ci0gICAgICAgIGF1dG8gbGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
OjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICB0YXJnZXRT
dGF0aXN0aWNzLmxhc3RTZWVuID0gbGFzdFNlZW47Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVEb21haW4pOwotCi0g
ICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
aXNSZWRpcmVjdCkgewotICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNz
aW9uSUQoKSwgcmVkaXJlY3RlZEZyb21Eb21haW4pOwotICAgICAgICByZWRpcmVjdGluZ09yaWdp
blN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0RG9tYWlu
KTsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCB0YXJnZXREb21haW4p
OwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bS5hZGQocmVkaXJlY3RlZEZyb21Eb21haW4pOwotCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0
aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1dlYlNvY2tldExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNvbnN0IFVSTCYgbWFpbkZy
YW1lVVJMLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKCFzaG91bGRMb2co
c2Vzc2lvbklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFy
Z2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9z
dCgpOwotICAgIAotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0
LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhvc3QpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwg
fTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IG1haW5GcmFtZVVSTCB9
OwotCi0gICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVj
ZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0KLSAgICBhdXRvJiB0YXJnZXRTdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc2Vz
c2lvbklELCB0YXJnZXREb21haW4pOwotICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBs
YXN0U2VlbjsKLSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsKLQotICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZO
ZWVkZWQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0
aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17
Ci0gICAgaWYgKCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1ZhbGlkKCkgfHwgIXNob3VsZExvZyhk
b2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHVybCA9
IGRvY3VtZW50LnVybCgpOwotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlz
TG9jYWxGaWxlKCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVn
aXN0cmFibGVEb21haW4gdG9wRnJhbWVEb21haW4geyB1cmwgfTsKLSAgICBhdXRvIG5ld1RpbWUg
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6
bm93KCkpOwotICAgIGF1dG8gbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uID0gbV9sYXN0UmVw
b3J0ZWRVc2VySW50ZXJhY3Rpb25NYXAuZ2V0KHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAobmV3
VGltZSA9PSBsYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLnNldCh0b3BGcmFtZURvbWFpbiwg
bmV3VGltZSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHRvcEZyYW1lRG9t
YWluKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc3Rh
dGlzdGljcy5sYXN0U2VlbiA9IG5ld1RpbWU7Ci0gICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG9wZW5lciA9IGZyYW1lLT5sb2FkZXIoKS5vcGVuZXIoKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckRvY3VtZW50ID0gb3BlbmVyLT5kb2N1bWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckZyYW1lID0gb3BlbmVyRG9jdW1lbnQt
PmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gb3BlbmVyUGFnZUlEID0g
b3BlbmVyRnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLnBhZ2VJRCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihkb2N1bWVudC5zZXNzaW9u
SUQoKSwgdG9wRnJhbWVEb21haW4sIG9wZW5lclBhZ2VJRC52YWx1ZSgpLCAqb3BlbmVyRG9jdW1l
bnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFdlIG5vdGlmeSByaWdodCBhd2F5IGluIGNhc2Ugb2YgYSB1c2VyIGludGVyYWN0
aW9uIGluc3RlYWQgb2Ygd2FpdGluZyB0aGUgdXN1YWwgNSBzZWNvbmRzIGJlY2F1c2Ugd2Ugd2Fu
dAotICAgIC8vIHRvIHVwZGF0ZSBjb29raWUgYmxvY2tpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBw
b3NzaWJsZS4KLSAgICBtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKGRv
Y3VtZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAg
IGlmIChzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24oKSkgewotICAgICAgICBhdXRvIGNvdW50ZXIg
PSArK21fbG9nZ2luZ0NvdW50ZXI7Ci0jZGVmaW5lIExPQ0FMX0xPRyhzdHIsIC4uLikgXAotICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbjogY291bnRlciA9ICUiIFBSSXU2NCAiOiAiIHN0ciwg
Y291bnRlciwgIyNfX1ZBX0FSR1NfXykKLQotICAgICAgICBhdXRvIGVzY2FwZUZvckpTT04gPSBb
XShTdHJpbmcgcykgewotICAgICAgICAgICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFj
ZSgnIicsICJcXFwiIik7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfTsKLSAgICAg
ICAgYXV0byBlc2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwotICAgICAg
ICBhdXRvIGVzY2FwZWREb21haW4gPSBlc2NhcGVGb3JKU09OKHRvcEZyYW1lRG9tYWluLnN0cmlu
ZygpKTsKLQotICAgICAgICBMT0NBTF9MT0coUiIoeyAidXJsIjogIiV7cHVibGljfXMiLCkiLCBl
c2NhcGVkVVJMLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBMT0NBTF9MT0coUiIoICAiZG9tYWlu
IiA6ICIle3B1YmxpY31zIiwpIiwgZXNjYXBlZERvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgTE9DQUxfTE9HKFIiKCAgInVudGlsIiA6ICVmIH0pIiwgbmV3VGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKSk7Ci0KLSN1bmRlZiBMT0NBTF9MT0cKLSAgICB9Ci0jZW5kaWYKLX0K
LQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBEb2N1bWVudCYgb3BlbmVyRG9j
dW1lbnQpCi17Ci0gICAgYXV0byBvcGVuZXJVcmwgPSBvcGVuZXJEb2N1bWVudC51cmwoKTsKLSAg
ICBSZWdpc3RyYWJsZURvbWFpbiBvcGVuZXJEb21haW4geyBvcGVuZXJVcmwgfTsKLSAgICBpZiAo
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbgotICAgICAgICAmJiAh
b3BlbmVyRG9jdW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhV
c2VySW50ZXJhY3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKQotICAgICAgICAmJiAh
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3RyaW5nKCksIFdURjo6YmxhbmtVUkwo
KSkpIHsKLSAgICAgICAgbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2so
c2Vzc2lvbklELCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIG9wZW5lclBhZ2VJRCwgb3Bl
bmVyRG9tYWluKTsKLSAgICAgICAgLy8gUmVtZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCBy
ZXF1ZXN0cyBzaW5jZSB0aGV5IGRvbid0IG5lZWQgdG8gYmUgcmVwZWF0ZWQuCi0gICAgICAgIG9w
ZW5lckRvY3VtZW50LnNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRo
VXNlckludGVyYWN0aW9uKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7Ci0gICAgfQotfQot
I2VuZGlmCi0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0
dXMpCi17Ci0jaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExv
Zyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJs
ZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7Ci0gICAgaWYgKCFsb2FkU3RhdHVzKSB7
Ci0gICAgICAgIGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9Mb2FkLmFkZChmYW1pbHlOYW1l
KS5pc05ld0VudHJ5KQotICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNr
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGlzdGljcy5mb250c1N1Y2Nl
c3NmdWxseUxvYWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNo
b3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJh
YmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1l
bnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21h
aW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAg
ICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmFtaWx5TmFtZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGxvYWRTdGF0dXMpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBS
ZXNvdXJjZUxvYWRPYnNlcnZlciomIHNoYXJlZE9ic2VydmVyKCkKIHsKLSNpZiBFTkFCTEUoV0VC
X0FQSV9TVEFUSVNUSUNTKQotICAgIGlmICghc2hvdWxkTG9nKGRvY3VtZW50LnNlc3Npb25JRCgp
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluIHsgZG9jdW1lbnQudXJsKCkgfTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCks
IHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdp
c3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKLSAgICBzdGF0
aXN0aWNzLmNhbnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElz
LmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oZG9jdW1lbnQpOwotI2VuZGlmCisgICAgc3RhdGljIFJlc291cmNlTG9hZE9ic2VydmVy
KiBvYnNlcnZlciA9IG51bGxwdHI7CisgICAgcmV0dXJuIG9ic2VydmVyOwogfQogCi12b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pCi17Ci0jaWYgRU5BQkxFKFdF
Ql9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVudC5zZXNzaW9uSUQo
KSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURv
bWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwg
cmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrID0gZmFsc2U7Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVE
b21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgpIH07Ci0gICAgaWYgKHN0YXRpc3Rp
Y3MuY2FudmFzQWN0aXZpdHlSZWNvcmQucmVjb3JkV3JpdHRlbk9yTWVhc3VyZWRUZXh0KHRleHRX
cml0dGVuKSkKLSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsK
LSAgICBpZiAoc3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNz
ZWRXZWJBUElzLmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdF
bnRyeSkKLSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAg
ICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrKQotICAgICAgICBzY2hlZHVsZU5v
dGlmaWNhdGlvbklmTmVlZGVkKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRleHRXcml0dGVuKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkg
ZnVuY3Rpb25OYW1lKQotewotI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYg
KCFzaG91bGRMb2coZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAg
UmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9Owot
ICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBi
b29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3Rh
dGlzdGljcy5uYXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUp
KSB7Ci0gICAgICAgIHN0YXRpc3RpY3MubmF2aWdhdG9yRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1
bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRy
dWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9t
YWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNz
LnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5G
cmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91
bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQo
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0o
ZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkgZnVuY3Rpb25OYW1lKQotewotI2lmIEVO
QUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQuc2Vz
c2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0
cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNz
aW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRp
b25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5zY3JlZW5GdW5jdGlvbnNB
Y2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAgICAgIHN0YXRpc3RpY3Muc2Ny
ZWVuRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENh
bGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9t
YWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hp
Y2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygp
KS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNj
aGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRv
Y3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAg
IAotUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0g
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5z
dXJlKHNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIYXNoTWFwPFJl
Z2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4oKTsKLSAgICB9KTsKLQot
ICAgIGF1dG8gYWRkRG9tYWluUmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZW5z
dXJlKGRvbWFpbiwgWyZkb21haW5dIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoZG9tYWluKTsKLSAgICB9KTsKLSAgICByZXR1cm4gYWRkRG9tYWluUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2hhcmVkT2JzZXJ2ZXIoKSk7CisgICAg
c2hhcmVkT2JzZXJ2ZXIoKSA9ICZvYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fbm90
aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIGlmIChtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RvcCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX25vdGlmaWNhdGlvblRpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1pbmlt
dW1Ob3RpZmljYXRpb25JbnRlcnZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnVwZGF0ZUNlbnRyYWxTdGF0aXN0aWNzU3RvcmUoKQotewotICAgIEFTU0VSVChtX25vdGlmaWNh
dGlvbkNhbGxiYWNrKTsKLSAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKLSAgICBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrKHRha2VTdGF0aXN0aWNzKCkpOwotfQotCi1TdHJpbmcgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBhdXRvKiByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFp
biA9IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5nZXQoc2Vzc2lvbklEKTsKLSAg
ICBpZiAoIXJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluKQotICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLQotICAgIGF1dG8gaXRlciA9IHJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluLT5m
aW5kKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOwotICAgIGlmIChpdGVyID09IHJlc291cmNl
U3RhdGlzdGljc0J5RG9tYWluLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gbWFrZVN0cmluZygiU3RhdGlzdGljcyBmb3IgIiwgdXJsLmhvc3QoKS50
b1N0cmluZygpLCAiOlxuIiwgaXRlci0+dmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLWF1dG8gUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKCkgLT4gUGVyU2Vzc2lvblJlc291cmNl
TG9hZERhdGEKLXsKLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSBwZXJTZXNzaW9uU3Rh
dGlzdGljczsKLQotICAgIGZvciAoYXV0byYgaXRlciA6IG1fcGVyU2Vzc2lvblJlc291cmNlU3Rh
dGlzdGljc01hcCkgewotICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3Rh
dGlzdGljczsKLSAgICAgICAgc3RhdGlzdGljcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZXIu
dmFsdWUtPnNpemUoKSk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBpdGVyLnZh
bHVlLT52YWx1ZXMoKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoc3RhdGlzdGljKSk7Ci0KLSAgICAgICAgcGVyU2Vzc2lvblN0YXRpc3RpY3MuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGl0ZXIua2V5LCBXVEZNb3ZlKHN0YXRpc3RpY3MpKSk7Ci0gICAgfQot
ICAgIAotICAgIG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAg
IHJldHVybiBwZXJTZXNzaW9uU3RhdGlzdGljczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6Y2xlYXJTdGF0ZSgpCi17Ci0gICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7Ci0g
ICAgbV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9sYXN0
UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb25NYXAuY2xlYXIoKTsKLX0KLQotVVJMIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpub25OdWxsT3duZXJVUkwoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25z
dAorUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKQog
ewotICAgIGF1dG8gdXJsID0gZG9jdW1lbnQudXJsKCk7Ci0gICAgYXV0byogZnJhbWUgPSBkb2N1
bWVudC5mcmFtZSgpOwotICAgIGF1dG8gaG9zdCA9IGRvY3VtZW50LnVybCgpLmhvc3QoKTsKLQot
ICAgIHdoaWxlICgoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkgJiYgZnJhbWUgJiYg
IWZyYW1lLT5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGZy
YW1lLT5vd25lckVsZW1lbnQoKTsKLQotICAgICAgICBBU1NFUlQob3duZXJFbGVtZW50ICE9IG51
bGxwdHIpOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZG9jID0gb3duZXJFbGVtZW50LT5kb2N1
bWVudCgpOwotICAgICAgICBmcmFtZSA9IGRvYy5mcmFtZSgpOwotICAgICAgICB1cmwgPSBkb2Mu
dXJsKCk7Ci0gICAgICAgIGhvc3QgPSB1cmwuaG9zdCgpOwotICAgIH0KLQotICAgIHJldHVybiB1
cmw7CisgICAgaWYgKCFzaGFyZWRPYnNlcnZlcigpKQorICAgICAgICBzaGFyZWRPYnNlcnZlcigp
ID0gbmV3IFJlc291cmNlTG9hZE9ic2VydmVyOworICAgIHJldHVybiAqc2hhcmVkT2JzZXJ2ZXIo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCA3NTcxZjE2NzUzMWY3MTlmNzY5YTYwZmVkZmQ2
MmQ0NDczNmVhN2I1Li44ODI4MGE5ZjE5OWM3ZGQwOGE1NjcxNDYyZDc5NWVkODRmYzdkNDI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjUs
OTEgKzI1LDQxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2FudmFzQWN0aXZpdHlS
ZWNvcmQuaCIKLSNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHBhbC9TZXNz
aW9uSUQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgTG9jazsKLWNsYXNzIFdvcmtR
dWV1ZTsKLWNsYXNzIFdhbGxUaW1lOwotfQorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNz
IFBhZ2U7Ci1jbGFzcyBSZWdpc3RyYWJsZURvbWFpbjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsK
IGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owot
Ci1zdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIgewotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9h
ZE9ic2VydmVyPjsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1
c2luZyBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpT
ZXNzaW9uSUQsIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OwogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkKCk7Ci0KLSAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7
Ci0gICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJMLCBjb25z
dCBVUkwmIG1haW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgbG9nVXNlcklu
dGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZl
ciYpOworICAgIAorICAgIHZpcnR1YWwgflJlc291cmNlTG9hZE9ic2VydmVyKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiAvKiBuZXdSZXF1ZXN0ICovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiAvKiByZWRpcmVjdFJlc3BvbnNlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBVUkwmIC8qIHRhcmdldFVSTCAqLywgY29uc3QgVVJMJiAvKiBtYWlu
RnJhbWVVUkwgKi8sIFBBTDo6U2Vzc2lvbklEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nVXNl
ckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBsb2dGb250TG9hZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgLyogZmFtaWx5TmFtZSAqLywgYm9vbCAvKiBsb2FkU3RhdHVzICovKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbG9nQ2FudmFzUmVhZChjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgLyogdGV4dFdyaXR0ZW4gKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2dOYXZpZ2F0
b3JBUElBY2Nlc3NlZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vz
c2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVu
QVBJKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFVSTCYpIHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3Rh
dGUoKSB7IH0KICAgICAKLSAgICB2b2lkIGxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiwgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpOwotICAgIHZvaWQgbG9nQ2Fu
dmFzUmVhZChjb25zdCBEb2N1bWVudCYpOwotICAgIHZvaWQgbG9nQ2FudmFzV3JpdGVPck1lYXN1
cmUoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHRleHRXcml0dGVuKTsKLSAgICB2b2lk
IGxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJKTsKLSAgICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vz
c2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVu
QVBJKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yVVJMKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBVUkwmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Rh
dGlzdGljc1VwZGF0ZWRDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBlclNlc3Npb25SZXNvdXJjZUxv
YWREYXRhJiYpPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlcXVlc3RTdG9yYWdl
QWNjZXNzVW5kZXJPcGVuZXJDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFBhZ2VJZGVudGlmaWVyLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ1VzZXJJbnRlcmFj
dGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhclN0YXRlKCk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAmJiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBib29sIHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uOyB9Ci0gICAgdm9pZCBz
ZXRTaG91bGRMb2dVc2VySW50ZXJhY3Rpb24oYm9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24p
IHsgbV9zaG91bGRMb2dVc2VySW50ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZE9ic2VydmVyKCk7Ci0KLSAg
ICBib29sIHNob3VsZExvZyhQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzY2hl
ZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7Ci0KLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2Fk
RGF0YSB0YWtlU3RhdGlzdGljcygpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgRG9jdW1lbnQmIG9wZW5lckRvY3VtZW50
KTsKLSNlbmRpZgotCi0gICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Pj4gbV9w
ZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotICAgIEhhc2hNYXA8UmVnaXN0cmFibGVE
b21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwot
ICAgIEZ1bmN0aW9uPHZvaWQoUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEpPiBtX25vdGlmaWNh
dGlvbkNhbGxiYWNrOwotICAgIEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgUGFnZUlkZW50aWZpZXIsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jik+IG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrOwotICAgIEZ1bmN0
aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fbG9n
VXNlckludGVyYWN0aW9uTm90aWZpY2F0aW9uQ2FsbGJhY2s7Ci0KLSAgICBUaW1lciBtX25vdGlm
aWNhdGlvblRpbWVyOwotCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykgJiYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgdWludDY0X3QgbV9sb2dnaW5nQ291bnRlciB7IDAg
fTsKLSAgICBib29sIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpIHsgfQogI2VuZGlm
Ci0KLSAgICBVUkwgbm9uTnVsbE93bmVyVVJMKGNvbnN0IERvY3VtZW50JikgY29uc3Q7CiB9Owog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzLmgKaW5kZXggNjIwZDEyYTE4YWVmOTJhNjJkNWZjNzRhN2Mz
YWFiN2E5NzZlNzk0NC4uNzg1OTlmODkzNzhlNjQ4NWE5NDhlOGRiOGJiNjdkNTJkY2I4ZGM4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oCkBA
IC0xMzQsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBnTWFuYWdlQXVkaW9TZXNzaW9uOwogCiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9B
dWRpb0J1ZmZlclNpemVFbmFibGVkOwotICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZEVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWxs
b3dzQW55U1NMQ2VydGlmaWNhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IGFjM2EyMWExZDQ3OGU2NWIyNDFmNjUzODMzYjU5YjlmZjQ1M2Q0MTEuLjQ4MTNlNzg2NDI5
MGMzZDZkYTU3Njc3Mjc3ODdlYWRhMzE5NzljMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6bG9nVXNlckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICAgICB9CiB9
CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRp
c3RpY3NVcGRhdGVkKFJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2Fk
RGF0YSYmIHN0YXRpc3RpY3MpCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6UGVy
U2Vzc2lvblJlc291cmNlTG9hZERhdGEmJiBzdGF0aXN0aWNzKQogewogICAgIGZvciAoYXV0byYg
aXRlciA6IHN0YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0g
bmV0d29ya1Byb2Nlc3MoKS5uZXR3b3JrU2Vzc2lvbihpdGVyLmZpcnN0KSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IDQyYzE3ZTFiMDViNDA2YjM5NGM5NTRhYjc5YzJhMzg2NDk5MjQx
MzQuLjA5YjZhMzUxODJkNTM3N2FmOGZkZjc4ZGZkYzhjMWU1YWE3YTQ2NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUlRDUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkTWFwLmgiCiAjaW5jbHVkZSAi
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTWVzc2FnZVBvcnRJZGVudGlmaWVyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50
aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBQQUwgewpAQCAtMjM1LDcgKzIzNSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjbGVhclBhZ2VTcGVjaWZpY0RhdGFGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFBB
TDo6U2Vzc2lvbklELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGxvZ1Vz
ZXJJbnRlcmFjdGlvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsK
LSAgICB2b2lkIHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKKyAgICB2b2lkIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCwgV2ViQ29yZTo6U3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYm
IGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb3Bl
bmVyUGFnZUlELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAppbmRleCBlYzY2NmJlMjAwMjdlNzljNGRkODdlMDdjZThjNWVjYjg5MDgzMGRhLi5k
MjUxYWZjYmUwMTUxZDU5NzUyZTM1OGZlYzUzNzI0ZTMzYjAxMGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAg
LTU1NCw2ICs1NTQsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAKK1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViVXNlck1lZGlhQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MjcwZGY2YjZhYTcyM2U2N2M5NTUwNTYwZTcw
N2ZmOTg4ZDk5OWQ1Li43YjlhNjcyOTBjYTUxMGE2Y2RjZDIyZDg1ZGZlOTQ2NTY4NTc1MjAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTkxMCw2ICs5MTAsNyBAQAogCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRh
dGlvbkFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDY1N0Q4ODgyMjY2NEExQTAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NB
bGVydC5tbSAqLzsgfTsKIAkJNDY1RjRFMDYyMzBCMkU5NTAwM0NFREI3IC8qIFN0b3JhZ2VOYW1l
c3BhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NjVGNEUwNTIzMEIyRTdDMDAzQ0VEQjcgLyogU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIuaCAqLzsgfTsKIAkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdl
ckNvbm5lY3Rpb24uaCAqLzsgfTsKKwkJNDY3MUZGMUYyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCAqLzsgfTsKIAkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NE
YXRhU3RvcmVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjdFNDNFNzIyNDNGRjZEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9y
ZVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURBIC8qIEJhY2tn
cm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tn
cm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQk0NkIwNTI0NzIyNjY4
RDg1MDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkIw
NTI0NDIyNjY4RDIzMDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nl
c3NDb250cm9sbGVyLmggKi87IH07CkBAIC0zMjE3LDYgKzMyMTgsOCBAQAogCQk0NjZCQzAzODFG
QTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5l
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjZCQzAzOTFGQTI2NkM5
MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY2QkMwM0ExRkEyNjZDOTAwMkZBOUMxIC8qIFdl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY3MUZGMUUyMzIxN0VGRjAwMUI2
NEM3IC8qIFdlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDY3RTQzRTcyMjQzRkY2RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM1NjlBMjFFODFD
QzcwMDZFMjdBMyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm92aXNpb25hbFBhZ2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvdmlzaW9uYWxQ
YWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNSw2ICs3NjI4
LDggQEAKIAkJCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8s
CiAJCQkJMUExRTA5MzExODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVu
dC5jcHAgKi8sCiAJCQkJMUExRTA5MzIxODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJh
Y2tlckNsaWVudC5oICovLAorCQkJCTQ2NzFGRjFFMjMyMTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAgKi8sCisJCQkJNDY3MUZGMUQyMzIxN0VGRjAwMUI2NEM3IC8q
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyLmggKi8sCiAJCQkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8sCiAJCQkJRDNCOTQ4NDUxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovLAogCQkJCUMxNDkzODAzMjIzNDFERjcw
MDBDRDcwNyAvKiBXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwICovLApAQCAtOTk5Myw4ICs5
OTk4LDEwIEBACiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVj
dFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwNDE1MEMzNTA2MDBFNTJDRTkg
LyogV2ViUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjA4ODFGMTUwNDEzRTkw
MEZDODJDNyAvKiBXZWJSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1ODYwRTcx
MjMwRjY3RkMwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMEFGRkJBMTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxv
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFCIC8qIFdl
YlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2NzFGRjFGMjMy
MTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0FGQkQzNjMyMUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzMDc1QjAxREU4NUY1ODAwMzlFQzY5IC8q
IFdlYlJUQ01vbml0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkFGNUY1MUUzQzA2NDkwMDFB
RTY3OCAvKiBXZWJSVENSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDIxMSw3ICsxMDIx
OCw2IEBACiAJCQkJMEYzQzcyNUIxOTZGNjA0RTAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0MjkzQTQxOTVBNDNEQTAwMjc4MkM3IC8q
IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RUU4NDlDODEzNjhEOTM5MDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3Vy
Y2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTRCQURGNDFGN0Q3
ODE0MDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTUxOEI1RDIxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyREQ1RTEyOTIxMEFEQzdCMDBEQjYwMTIgLyogV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1ZjE5Y2MyOTA2YWNmODZhOWY2YzdlMmYyNDk2
ZDhmMzg4ZmMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMzg5
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKKworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EZXBy
ZWNhdGVkR2xvYmFsU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgY29uc3QgU2Vj
b25kcyBtaW5pbXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwgeyA1X3MgfTsKKworc3RhdGljIGJvb2wg
aXMzeHhSZWRpcmVjdChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBy
ZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKSA8PSAzOTk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZExvZ1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIHJldHVybiBEZXBy
ZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgJiYg
IXNlc3Npb25JRC5pc0VwaGVtZXJhbCgpOworfQorCitXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIoKQorICAgIDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhp
cywgJldlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3Jl
KQoreworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3Bl
bmVyUGFnZUlELCBEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpCit7CisgICAgYXV0byBvcGVuZXJV
cmwgPSBvcGVuZXJEb2N1bWVudC51cmwoKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBvcGVuZXJE
b21haW4geyBvcGVuZXJVcmwgfTsKKyAgICBpZiAoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
ICE9IG9wZW5lckRvbWFpbgorICAgICAgICAmJiAhb3BlbmVyRG9jdW1lbnQuaGFzUmVxdWVzdGVk
UGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24oZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzKQorICAgICAgICAmJiAhZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShvcGVu
ZXJVcmwuc3RyaW5nKCksIFdURjo6YmxhbmtVUkwoKSkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
LnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZXF1ZXN0U3Rv
cmFnZUFjY2Vzc1VuZGVyT3BlbmVyKHNlc3Npb25JRCwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNj
ZXNzLCBvcGVuZXJQYWdlSUQsIG9wZW5lckRvbWFpbiksIDApOworICAgICAgICAKKyAgICAgICAg
Ly8gUmVtZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCByZXF1ZXN0cyBzaW5jZSB0aGV5IGRv
bid0IG5lZWQgdG8gYmUgcmVwZWF0ZWQuCisgICAgICAgIG9wZW5lckRvY3VtZW50LnNldEhhc1Jl
cXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7CisgICAgfQorfQorICAgIAorUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fcGVyU2Vz
c2lvblJlc291cmNlU3RhdGlzdGljc01hcC5lbnN1cmUoc2Vzc2lvbklELCBbXSB7CisgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+PigpOworICAgIH0pOworCisgICAgYXV0byBhZGREb21haW5SZXN1bHQgPSBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5lbnN1cmUoZG9tYWluLCBbJmRvbWFpbl0geworICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb21haW4pOworICAgIH0pOworICAg
IHJldHVybiBhZGREb21haW5SZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCkKK3sKKyAg
ICBpZiAobV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKSkgeworICAg
ICAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9ub3RpZmljYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX25v
dGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtaW5pbXVtTm90aWZpY2F0aW9uSW50ZXJ2YWwp
OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlz
dGljc1N0b3JlKCkKK3sKKyAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKHRha2VTdGF0aXN0aWNzKCkpLCAwKTsKK30KKwor
U3RyaW5nIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgY29uc3QgVVJMJiB1cmwpCit7CisgICAgYXV0byogcmVzb3VyY2VT
dGF0aXN0aWNzQnlEb21haW4gPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0
KHNlc3Npb25JRCk7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbikKKyAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisKKyAgICBhdXRvIGl0ZXIgPSByZXNvdXJjZVN0YXRp
c3RpY3NCeURvbWFpbi0+ZmluZChSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9KTsKKyAgICBpZiAo
aXRlciA9PSByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFpbi0+ZW5kKCkpCisgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlN0YXRpc3RpY3MgZm9y
ICIsIHVybC5ob3N0KCkudG9TdHJpbmcoKSwgIjpcbiIsIGl0ZXItPnZhbHVlLnRvU3RyaW5nKCkp
OworfQorCithdXRvIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjp0YWtlU3RhdGlzdGljcygpIC0+
IFBlclNlc3Npb25SZXNvdXJjZUxvYWREYXRhCit7CisgICAgUGVyU2Vzc2lvblJlc291cmNlTG9h
ZERhdGEgcGVyU2Vzc2lvblN0YXRpc3RpY3M7CisKKyAgICBmb3IgKGF1dG8mIGl0ZXIgOiBtX3Bl
clNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXApIHsKKyAgICAgICAgVmVjdG9yPFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+IHN0YXRpc3RpY3M7CisgICAgICAgIHN0YXRpc3RpY3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShpdGVyLnZhbHVlLT5zaXplKCkpOworCisgICAgICAgIGZvciAoYXV0byYg
c3RhdGlzdGljIDogaXRlci52YWx1ZS0+dmFsdWVzKCkpCisgICAgICAgICAgICBzdGF0aXN0aWNz
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHN0YXRpc3RpYykpOworCisgICAgICAgIHBlclNlc3Np
b25TdGF0aXN0aWNzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihpdGVyLmtleSwgV1RGTW92ZShzdGF0
aXN0aWNzKSkpOworICAgIH0KKyAgICAKKyAgICBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuY2xlYXIoKTsKKyAgICByZXR1cm4gcGVyU2Vzc2lvblN0YXRpc3RpY3M7Cit9CisKK3Zv
aWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmNsZWFyU3RhdGUoKQoreworICAgIG1fbm90aWZp
Y2F0aW9uVGltZXIuc3RvcCgpOworICAgIG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01h
cC5jbGVhcigpOworICAgIG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLmNsZWFyKCk7
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0
dXMpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKKyAgICBpZiAoIXNob3VsZExv
Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3Vt
ZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVE
b21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7
CisgICAgaWYgKCFsb2FkU3RhdHVzKSB7CisgICAgICAgIGlmIChzdGF0aXN0aWNzLmZvbnRzRmFp
bGVkVG9Mb2FkLmFkZChmYW1pbHlOYW1lKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoc3RhdGlzdGljcy5mb250c1N1Y2Nlc3NmdWxseUxvYWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNO
ZXdFbnRyeSkKKyAgICAgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRy
dWU7CisgICAgfQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9t
YWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OworICAgIGlmIChzdGF0aXN0aWNz
LnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5G
cmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91
bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQo
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
ZmFtaWx5TmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGxvYWRTdGF0dXMpOworI2VuZGlmCit9Cisg
ICAgCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNSZWFkKGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNUSUNTKQorICAg
IGlmICghc2hvdWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5zZXNzaW9uSUQo
KSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxl
RG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklE
KCksIHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVS
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBz
dGF0aXN0aWNzLmNhbnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKKyAgICBp
ZiAoc3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJB
UElzLmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkK
KyAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZG9jdW1lbnQpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ0NhbnZhc1dyaXRlT3JNZWFzdXJlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiB0ZXh0V3JpdHRlbikKK3sKKyNpZiBFTkFCTEUoV0VCX0FQSV9TVEFUSVNU
SUNTKQorICAgIGlmICghc2hvdWxkTG9nUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhkb2N1bWVudC5z
ZXNzaW9uSUQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJl
Z2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudXJsKCkgfTsKKyAgICBhdXRvJiBzdGF0aXN0aWNz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQu
c2Vzc2lvbklELCByZWdpc3RyYWJsZURvbWFpbik7CisgICAgYm9vbCBzaG91bGRDYWxsTm90aWZp
Y2F0aW9uQ2FsbGJhY2sgPSBmYWxzZTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVS
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBp
ZiAoc3RhdGlzdGljcy5jYW52YXNBY3Rpdml0eVJlY29yZC5yZWNvcmRXcml0dGVuT3JNZWFzdXJl
ZFRleHQodGV4dFdyaXR0ZW4pKQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgPSB0cnVlOworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5z
V2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmlu
ZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sg
PSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCisgICAgICAg
IHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dFdyaXR0ZW4pOworI2VuZGlmCit9Cisg
ICAgCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dOYXZpZ2F0b3JBUElBY2Nlc3Nl
ZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
Ok5hdmlnYXRvckFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQu
c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBy
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50
LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlm
aWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLm5hdmlnYXRvckZ1
bmN0aW9uc0FjY2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlz
dGljcy5uYXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAg
ICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVn
aXN0cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BE
b2N1bWVudCgpLnVybCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJs
ZURvbWFpbnNXaGljaEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21h
aW4uc3RyaW5nKCkpLmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25D
YWxsYmFjayA9IHRydWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykK
KyAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2Vu
ZGlmCit9CisgICAgCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3JlZW5BUElB
Y2Nlc3NlZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3M6OlNjcmVlbkFQSSBmdW5jdGlvbk5hbWUpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RB
VElTVElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1l
bnQuc2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFp
biByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlz
dGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3Vt
ZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxkQ2FsbE5v
dGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgaWYgKCFzdGF0aXN0aWNzLnNjcmVlbkZ1
bmN0aW9uc0FjY2Vzc2VkLmNvbnRhaW5zKGZ1bmN0aW9uTmFtZSkpIHsKKyAgICAgICAgc3RhdGlz
dGljcy5zY3JlZW5GdW5jdGlvbnNBY2Nlc3NlZC5hZGQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAg
c2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICB9CisgICAgUmVnaXN0
cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1
bWVudCgpLnVybCgpIH07CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURv
bWFpbnNXaGljaEFjY2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4u
c3RyaW5nKCkpLmlzTmV3RW50cnkpCisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxs
YmFjayA9IHRydWU7CisgICAgaWYgKHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjaykKKyAg
ICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oZG9jdW1lbnQpOworICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlm
Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJlc291cmNlTG9hZGlu
Zyhjb25zdCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgbmV3UmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlQo
ZnJhbWUtPnBhZ2UoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UgfHwgIXNob3VsZExv
Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3MocGFnZS0+c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIGlzUmVkaXJlY3QgPSBpczN4eFJlZGlyZWN0KHJlZGlyZWN0UmVzcG9u
c2UpOworICAgIGNvbnN0IFVSTCYgcmVkaXJlY3RlZEZyb21VUkwgPSByZWRpcmVjdFJlc3BvbnNl
LnVybCgpOworICAgIGNvbnN0IFVSTCYgdGFyZ2V0VVJMID0gbmV3UmVxdWVzdC51cmwoKTsKKyAg
ICBjb25zdCBVUkwmIHRvcEZyYW1lVVJMID0gZnJhbWUgPyBmcmFtZS0+bWFpbkZyYW1lKCkuZG9j
dW1lbnQoKS0+dXJsKCkgOiBVUkwoKTsKKyAgICAKKyAgICBhdXRvIHRhcmdldEhvc3QgPSB0YXJn
ZXRVUkwuaG9zdCgpOworICAgIGF1dG8gdG9wRnJhbWVIb3N0ID0gdG9wRnJhbWVVUkwuaG9zdCgp
OworCisgICAgaWYgKHRhcmdldEhvc3QuaXNFbXB0eSgpIHx8IHRvcEZyYW1lSG9zdC5pc0VtcHR5
KCkgfHwgdGFyZ2V0SG9zdCA9PSB0b3BGcmFtZUhvc3QgfHwgKGlzUmVkaXJlY3QgJiYgdGFyZ2V0
SG9zdCA9PSByZWRpcmVjdGVkRnJvbVVSTC5ob3N0KCkpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdp
c3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IHRvcEZyYW1lVVJMIH07CisgICAgUmVnaXN0
cmFibGVEb21haW4gcmVkaXJlY3RlZEZyb21Eb21haW4geyByZWRpcmVjdGVkRnJvbVVSTCB9Owor
CisgICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbiB8fCAoaXNSZWRpcmVjdCAm
JiB0YXJnZXREb21haW4gPT0gcmVkaXJlY3RlZEZyb21Eb21haW4pKQorICAgICAgICByZXR1cm47
CisKKyAgICB7CisgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNzaW9uSUQoKSwgdGFyZ2V0
RG9tYWluKTsKKyAgICAgICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6
OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7CisgICAgICAgIHRhcmdldFN0
YXRpc3RpY3MubGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5z
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmFkZCh0b3BGcmFtZURvbWFpbik7CisKKyAg
ICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOworICAgIH0KKworICAgIGlmIChp
c1JlZGlyZWN0KSB7CisgICAgICAgIGF1dG8mIHJlZGlyZWN0aW5nT3JpZ2luU3RhdGlzdGljcyA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Np
b25JRCgpLCByZWRpcmVjdGVkRnJvbURvbWFpbik7CisgICAgICAgIHJlZGlyZWN0aW5nT3JpZ2lu
U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZCh0YXJnZXREb21haW4p
OworICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdldERvbWFpbik7
CisgICAgICAgIHRhcmdldFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
LmFkZChyZWRpcmVjdGVkRnJvbURvbWFpbik7CisKKyAgICAgICAgc2NoZWR1bGVOb3RpZmljYXRp
b25JZk5lZWRlZCgpOworICAgIH0KK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
bG9nV2ViU29ja2V0TG9hZGluZyhjb25zdCBVUkwmIHRhcmdldFVSTCwgY29uc3QgVVJMJiBtYWlu
RnJhbWVVUkwsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBpZiAoIXNob3VsZExv
Z1Jlc291cmNlTG9hZFN0YXRpc3RpY3Moc2Vzc2lvbklEKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byB0YXJnZXRIb3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIG1haW5GcmFt
ZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9zdCgpOworICAgIAorICAgIGlmICh0YXJnZXRIb3N0Lmlz
RW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IG1haW5G
cmFtZUhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0
YXJnZXREb21haW4geyB0YXJnZXRVUkwgfTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFt
ZURvbWFpbiB7IG1haW5GcmFtZVVSTCB9OworCisgICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BG
cmFtZURvbWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsYXN0U2VlbiA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7
CisKKyAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc2Vzc2lvbklELCB0YXJnZXREb21haW4pOworICAgIHRhcmdl
dFN0YXRpc3RpY3MubGFzdFNlZW4gPSBsYXN0U2VlbjsKKyAgICB0YXJnZXRTdGF0aXN0aWNzLnN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsKKworICAg
IHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisgICAgaWYgKCFkb2N1bWVudC5zZXNzaW9uSUQo
KS5pc1ZhbGlkKCkgfHwgIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQu
c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiB1cmwgPSBkb2N1bWVu
dC51cmwoKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXNBYm91dCgpIHx8IHVybC5pc0xvY2FsRmls
ZSgpIHx8IHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZ2lzdHJhYmxl
RG9tYWluIHRvcEZyYW1lRG9tYWluIHsgdXJsIH07CisgICAgYXV0byBuZXdUaW1lID0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKTsK
KyAgICBhdXRvIGxhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbiA9IG1fbGFzdFJlcG9ydGVkVXNl
ckludGVyYWN0aW9uTWFwLmdldCh0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKG5ld1RpbWUgPT0g
bGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xh
c3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbk1hcC5zZXQodG9wRnJhbWVEb21haW4sIG5ld1RpbWUp
OworCisgICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7Cisg
ICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOworICAgIHN0YXRpc3RpY3Mu
bGFzdFNlZW4gPSBuZXdUaW1lOworICAgIHN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUgPSBuZXdUaW1lOworCisgICAgaWYgKGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJh
bWUoKSkgeworICAgICAgICBpZiAoYXV0byogb3BlbmVyID0gZnJhbWUtPmxvYWRlcigpLm9wZW5l
cigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRG9jdW1lbnQgPSBvcGVuZXItPmRv
Y3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogb3BlbmVyRnJhbWUgPSBvcGVu
ZXJEb2N1bWVudC0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvcGVu
ZXJQYWdlSUQgPSBvcGVuZXJGcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkucGFnZUlEKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKGRvY3Vt
ZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbiwgb3BlbmVyUGFnZUlELnZhbHVlKCksICpv
cGVuZXJEb2N1bWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gV2Ugbm90aWZ5IHJpZ2h0IGF3YXkgaW4gY2FzZSBvZiBhIHVz
ZXIgaW50ZXJhY3Rpb24gaW5zdGVhZCBvZiB3YWl0aW5nIHRoZSB1c3VhbCA1IHNlY29uZHMgYmVj
YXVzZSB3ZSB3YW50CisgICAgLy8gdG8gdXBkYXRlIGNvb2tpZSBibG9ja2luZyBzdGF0ZSBhcyBx
dWlja2x5IGFzIHBvc3NpYmxlLgorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6TG9nVXNlckludGVyYWN0aW9uKGRvY3VtZW50LnNl
c3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbiksIDApOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgaWYgKG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIGF1dG8g
Y291bnRlciA9ICsrbV9sb2dnaW5nQ291bnRlcjsKKyNkZWZpbmUgTE9DQUxfTE9HKHN0ciwgLi4u
KSBcCisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0aW9uOiBjb3VudGVyID0gJSIgUFJJdTY0ICI6
ICIgc3RyLCBjb3VudGVyLCAjI19fVkFfQVJHU19fKQorCisgICAgICAgIGF1dG8gZXNjYXBlRm9y
SlNPTiA9IFtdKFN0cmluZyBzKSB7CisgICAgICAgICAgICBzLnJlcGxhY2UoJ1xcJywgIlxcXFwi
KS5yZXBsYWNlKCciJywgIlxcXCIiKTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9
OworICAgICAgICBhdXRvIGVzY2FwZWRVUkwgPSBlc2NhcGVGb3JKU09OKHVybC5zdHJpbmcoKSk7
CisgICAgICAgIGF1dG8gZXNjYXBlZERvbWFpbiA9IGVzY2FwZUZvckpTT04odG9wRnJhbWVEb21h
aW4uc3RyaW5nKCkpOworCisgICAgICAgIExPQ0FMX0xPRyhSIih7ICJ1cmwiOiAiJXtwdWJsaWN9
cyIsKSIsIGVzY2FwZWRVUkwudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPQ0FMX0xPRyhSIigg
ICJkb21haW4iIDogIiV7cHVibGljfXMiLCkiLCBlc2NhcGVkRG9tYWluLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICBMT0NBTF9MT0coUiIoICAidW50aWwiIDogJWYgfSkiLCBuZXdUaW1lLnNlY29u
ZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKKworI3VuZGVmIExPQ0FMX0xPRworICAgIH0KKyNl
bmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShSRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI0YmNiY2Q4M2UzY2M4YjgyODNmMTU3YjhhODIyYmVkNTMyNjVhOWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKworI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdXNpbmcgUGVyU2Vzc2lvblJlc291cmNlTG9hZERh
dGEgPSBWZWN0b3I8c3RkOjpwYWlyPFBBTDo6U2Vzc2lvbklELCBWZWN0b3I8V2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4+PjsKKworICAgIFdlYlJlc291cmNlTG9hZE9ic2VydmVyKCk7
CisgICAgCisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgV2ViQ29yZTo6RnJh
bWUqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIG5ld1JlcXVlc3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpIGZpbmFsOworICAgIHZv
aWQgbG9nV2ViU29ja2V0TG9hZGluZyhjb25zdCBVUkwmIHRhcmdldFVSTCwgY29uc3QgVVJMJiBt
YWluRnJhbWVVUkwsIFBBTDo6U2Vzc2lvbklEKSBmaW5hbDsKKyAgICB2b2lkIGxvZ1VzZXJJbnRl
cmFjdGlvbldpdGhSZWR1Y2VkVGltZVJlc29sdXRpb24oY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQm
KSBmaW5hbDsKKyAgICB2b2lkIGxvZ0ZvbnRMb2FkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50Jiwg
Y29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpIGZpbmFsOworICAgIHZv
aWQgbG9nQ2FudmFzUmVhZChjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYpIGZpbmFsOworICAgIHZv
aWQgbG9nQ2FudmFzV3JpdGVPck1lYXN1cmUoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmLCBjb25z
dCBTdHJpbmcmIHRleHRXcml0dGVuKSBmaW5hbDsKKyAgICB2b2lkIGxvZ05hdmlnYXRvckFQSUFj
Y2Vzc2VkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJKSBmaW5hbDsKKyAgICB2b2lkIGxvZ1NjcmVlbkFQ
SUFjY2Vzc2VkKGNvbnN0IFdlYkNvcmU6OkRvY3VtZW50JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczo6U2NyZWVuQVBJKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAorICAgIHZvaWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wgc2hvdWxk
TG9nVXNlckludGVyYWN0aW9uKSBmaW5hbCB7IG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uID0g
c2hvdWxkTG9nVXNlckludGVyYWN0aW9uOyB9CisjZW5kaWYKKworICAgIFN0cmluZyBzdGF0aXN0
aWNzRm9yVVJMKFBBTDo6U2Vzc2lvbklELCBjb25zdCBVUkwmKSBmaW5hbDsKKyAgICB2b2lkIHVw
ZGF0ZUNlbnRyYWxTdGF0aXN0aWNzU3RvcmUoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyU3RhdGUo
KSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihQQUw6OlNlc3Np
b25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNjaGVk
dWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKworICAgIFBlclNlc3Npb25SZXNvdXJjZUxvYWRE
YXRhIHRha2VTdGF0aXN0aWNzKCk7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvcGVu
ZXJQYWdlSUQsIFdlYkNvcmU6OkRvY3VtZW50JiBvcGVuZXJEb2N1bWVudCk7CisKKyAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBzdGQ6OnVuaXF1ZV9wdHI8SGFzaE1hcDxXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4+PiBtX3BlclNl
c3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXA7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiwgV1RGOjpXYWxsVGltZT4gbV9sYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb25N
YXA7CisKKyAgICBXZWJDb3JlOjpUaW1lciBtX25vdGlmaWNhdGlvblRpbWVyOworCisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgdWludDY0X3QgbV9sb2dnaW5nQ291bnRlciB7IDAgfTsK
KyAgICBib29sIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IDY0YWUxMjBmOWI4OTY2YWMzMDNjNTVkOTQ3OTM0OTgwNzdiNmQ4YzAuLjExNTYxNWExMzYz
ZjBmZThmN2ExZTBjNzllMzdkMmViMTgxMWIyMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRPYnNl
cnZlci5oIgogI2luY2x1ZGUgIldlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1ZGUg
IldlYlNlcnZpY2VXb3JrZXJQcm92aWRlci5oIgpAQCAtMTEwLDcgKzExMSw2IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Byb2Nlc3NXYXJtaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFp
bi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oPgpAQCAtMjE3LDE2ICsyMTcsNyBAQCBXZWJQcm9jZXNzOjpXZWJQcm9jZXNz
KCkKICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcy5hZGQoUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSwgSGFzaE1hcDx1bnNpZ25lZCwgV2FsbFRpbWU+KCkpOwogCiAj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2hhcmVkKCkuc2V0U3RhdGlzdGljc1VwZGF0ZWRDYWxsYmFjayhbdGhpc10gKGF1dG8m
JiBzdGF0aXN0aWNzKSB7Ci0gICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoV1RGTW92ZShzdGF0aXN0aWNzKSksIDAp
OwotICAgIH0pOwotCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnNldFJlcXVl
c3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXJDYWxsYmFjayhbdGhpc10gKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgb3BlbmVyRG9tYWluKSB7Ci0gICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihzZXNzaW9uSUQsIGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2Vzcywgb3BlbmVyUGFnZUlELCBvcGVuZXJEb21haW4pLCAwKTsK
LSAgICB9KTsKLSAgICAKLSAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkuc2V0TG9n
VXNlckludGVyYWN0aW9uTm90aWZpY2F0aW9uQ2FsbGJhY2soW3RoaXNdIChQQUw6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIHsgICAgZW5zdXJl
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpMb2dVc2VySW50ZXJhY3Rpb24oc2Vzc2lvbklE
LCBkb21haW4pLCAwKTsKLSAgICB9KTsKKyAgICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2V0U2hh
cmVkKCpuZXcgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOwogI2VuZGlmCiAgICAgCiAgICAgR2ln
YWNhZ2U6OmRpc2FibGVEaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlmU2hvdWxkQmVFbmFibGVk
KCk7CkBAIC0xNjU1LDcgKzE2NDYsOSBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogdm9pZCBXZWJQcm9jZXNzOjpjbGVh
clJlc291cmNlTG9hZFN0YXRpc3RpY3MoKQogeworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCiAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmNsZWFyU3RhdGUo
KTsKKyNlbmRpZgogfQogCiBSZWZQdHI8QVBJOjpPYmplY3Q+IFdlYlByb2Nlc3M6OnRyYW5zZm9y
bUhhbmRsZXNUb09iamVjdHMoQVBJOjpPYmplY3QqIG9iamVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378253</attachid>
            <date>2019-09-06 16:58:37 -0700</date>
            <delta_ts>2019-09-06 18:53:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201517-20190906165836.patch</filename>
            <type>text/plain</type>
            <size>61267</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA3ZWZmM2NmMTk0YTU1
NTM1N2NlNTQ3M2YyMDJhZDUxYTU2ZmNiMy4uODZiM2VkYmU3YTRiYmJhMzBmZjJlMDY0NmMzMjBi
OTI4Y2I0MzQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE5LTA5LTA2ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJlbnQg
RnVsZ2hhbS4KKworICAgICAgICBNb3ZlIHRoZSBSZXNvdXJjZUxvYWRPYnNlcnZlciBsb2dpYyB0
byBXZWJLaXQyIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IFdlYktpdDEuIFRoaXMgYWxsb3dzIHVz
IHRvIHNpbXBsaWZ5CisgICAgICAgIGNvZGUuCisKKyAgICAgICAgSW4gYSBmb2xsb3ctdXAgcGF0
Y2gsIEkgd2lsbCBzaW1wbGlmeSB0aGUgY29kZSBldmVuIGZ1cnRoZXIgYnkgbGV2ZXJhZ2luZyB0
aGUgZmFjdCB0aGF0IGEgV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIGlzIGFsd2F5cyBhc3Nv
Y2lhdGVkIHdpdGggYSBzaW5nbGUgV2Vic2l0ZURhdGFTdG9yZSAvIHNlc3Npb25JRDoKKyAgICAg
ICAgLSBObyBuZWVkIGZvciBhIEhhc2hNYXAgb2Ygc2Vzc2lvbklEcworICAgICAgICAtIE5vIG5l
ZWQgdG8gZXZlbiBhbGxvY2F0ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgaWYgdGhlIFdlYlBy
b2Nlc3MgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgorCisgICAgICAg
ICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNoYXJlZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCk6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZlcjo6
flJlc291cmNlTG9hZE9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJl
c29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0Zv
bnRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52
YXNSZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52
YXNXcml0ZU9yTWVhc3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkT2JzZXJ2ZXI6OmxvZ1NjcmVlbkFQSUFjY2Vzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlTG9hZE9ic2VydmVyOjpzdGF0aXN0aWNzRm9yVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZE9ic2VydmVyOjpzZXRTaG91bGRMb2dVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAqIHBhZ2UvRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzLmg6CisKIDIw
MTktMDktMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjQ5MzY3KTogbV9kZWNvZGluZ1Byb21pc2VzIGdyb3dzIGlu
ZGVmaW5pdGVseSB1bnRpbCBJbWFnZUxvYWRlciBkZXN0cnVjdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1ZmYz
M2ZmNjJlZDQyNjMxOGJiY2Q4Y2NhZjIxMjE5NDk4N2Y3OWMxLi5kMTNhNThiN2EzNWQ4YzU4MzU2
MjM3ZTYxYjNjOWMyMWIwZTMyYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTA5
LTA2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIgbG9naWMgdG8gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTE3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgQnJlbnQgRnVsZ2hhbS4KKworICAgICAgICBNb3ZlIHRoZSBSZXNvdXJjZUxvYWRPYnNlcnZl
ciBsb2dpYyB0byBXZWJLaXQyIHNpbmNlIGl0IGlzIG5vdCB1c2VkIGJ5IFdlYktpdDEuIFRoaXMg
YWxsb3dzIHVzIHRvIHNpbXBsaWZ5CisgICAgICAgIGNvZGUuCisKKyAgICAgICAgSW4gYSBmb2xs
b3ctdXAgcGF0Y2gsIEkgd2lsbCBzaW1wbGlmeSB0aGUgY29kZSBldmVuIGZ1cnRoZXIgYnkgbGV2
ZXJhZ2luZyB0aGUgZmFjdCB0aGF0IGEgV2ViQ29udGVudCBwcm9jZXNzCisgICAgICAgIGlzIGFs
d2F5cyBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgV2Vic2l0ZURhdGFTdG9yZSAvIHNlc3Npb25J
RDoKKyAgICAgICAgLSBObyBuZWVkIGZvciBhIEhhc2hNYXAgb2Ygc2Vzc2lvbklEcworICAgICAg
ICAtIE5vIG5lZWQgdG8gZXZlbiBhbGxvY2F0ZSB0aGUgUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgaWYg
dGhlIFdlYlByb2Nlc3MgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGVwaGVtZXJhbCBzZXNzaW9uLgor
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNlcnZlci5jcHAuCisg
ICAgICAgIChXZWJLaXQ6OmlzM3h4UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlcjo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hvdWxkTG9nIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5k
ZXJPcGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6ZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjp1cGRhdGVDZW50
cmFsU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6dGFrZVN0YXRpc3RpY3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6Y2xlYXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZE9ic2VydmVyOjpub25OdWxsT3duZXJVUkwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nRm9udExvYWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2FudmFzUmVhZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dOYXZpZ2F0b3JBUElBY2Nl
c3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTY3Jl
ZW5BUElBY2Nlc3NlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZE9ic2VydmVy
Ojpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRPYnNlcnZlcjo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNv
bHV0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNl
TG9hZE9ic2VydmVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHA6CisKIDIwMTktMDktMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBEZXByZWNhdGUgYWxsIFdLQ29va2llTWFuYWdlclJlZiBmdW5jdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggODljNWM2ZDJmMjIwOTc3NTBmNmNjOGM5MTM5NDQ3
ZDJkY2VhNDhhNi4uYjU0MTA2MmRjZmRjY2RiZDE3M2VmMzYyNzgzOTdkM2M1ZjYxMjgyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmgKQEAgLTE0OTEsOCArMTQ5MSw4IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBib29sIGhhc1JlcXVl
c3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzZXRIYXNSZXF1ZXN0ZWRQYWdlU3BlY2lmaWNT
dG9yYWdlQWNjZXNzV2l0aFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFn
ZUFjY2Vzc1dpdGhVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VB
Y2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB3YXNMb2FkZWRXaXRoRGF0YVRyYW5zZmVyRnJvbVByZXZhbGVu
dFJlc291cmNlKCk7CiAgICAgdm9pZCBkb3duZ3JhZGVSZWZlcnJlclRvUmVnaXN0cmFibGVEb21h
aW4oKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNl
TG9hZE9ic2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRPYnNl
cnZlci5jcHAKaW5kZXggOWNiMzE2ZTlkMTY2ZjY3Y2I3NjYxZGNmZTI3M2E2NjY1MzFmZjU2Yi4u
YmVkN2NhNDI4MThjOGY1NGQyMGFiYjhkYzAyY2FhNDBhMTliOTgxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0yNiw0MTQgKzI2LDI1
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXIu
aCIKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJl
c3BvbnNlLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBTZWNvbmRzIG1pbmltdW1Ob3RpZmljYXRpb25JbnRl
cnZhbCB7IDVfcyB9OwotCi1SZXNvdXJjZUxvYWRPYnNlcnZlcjo6UmVzb3VyY2VMb2FkT2JzZXJ2
ZXIoKQotICAgIDogbV9ub3RpZmljYXRpb25UaW1lcigqdGhpcywgJlJlc291cmNlTG9hZE9ic2Vy
dmVyOjp1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKQotewotfQotCi1SZXNvdXJjZUxvYWRP
YnNlcnZlciYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFJlc291cmNlTG9hZE9ic2VydmVyPiByZXNvdXJjZUxvYWRPYnNlcnZlcjsK
LSAgICByZXR1cm4gcmVzb3VyY2VMb2FkT2JzZXJ2ZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNldFN0YXRpc3RpY3NVcGRhdGVkQ2FsbGJhY2soRnVuY3Rpb248dm9pZChQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKT4mJiBub3RpZmljYXRpb25DYWxsYmFjaykKLXsKLSAg
ICBBU1NFUlQoIW1fbm90aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIG1fbm90aWZpY2F0aW9uQ2Fs
bGJhY2sgPSBXVEZNb3ZlKG5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRPYnNlcnZlcjo6c2V0UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNr
KEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdlSWRlbnRpZmllciBvcGVu
ZXJQYWdlSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBvcGVuZXJEb21haW4pPiYmIGNhbGxi
YWNrKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2Fs
bGJhY2spOwotICAgIG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldExv
Z1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpT
ZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYgY2FsbGJhY2spCi17Ci0gICAg
QVNTRVJUKCFtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKTsKLSAgICBt
X2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayk7Ci19Ci0gICAgCi1zdGF0aWMgaW5saW5lIGJvb2wgaXMzeHhSZWRpcmVjdChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4gcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKSA+PSAzMDAgJiYgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA8PSAzOTk7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNob3VsZExvZyhQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6cmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoKSAmJiAhc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
JiYgbV9ub3RpZmljYXRpb25DYWxsYmFjazsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKQotewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLQotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAg
IGlmICghcGFnZSB8fCAhc2hvdWxkTG9nKHBhZ2UtPnNlc3Npb25JRCgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRpcmVjdFJlc3Bv
bnNlKTsKLSAgICBjb25zdCBVUkwmIHJlZGlyZWN0ZWRGcm9tVVJMID0gcmVkaXJlY3RSZXNwb25z
ZS51cmwoKTsKLSAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3QudXJsKCk7Ci0g
ICAgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5GcmFtZSgpLmRv
Y3VtZW50KCktPnVybCgpIDogVVJMKCk7Ci0gICAgCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFy
Z2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHRvcEZyYW1lVVJMLmhvc3Qo
KTsKLQotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCB0b3BGcmFtZUhvc3QuaXNFbXB0
eSgpIHx8IHRhcmdldEhvc3QgPT0gdG9wRnJhbWVIb3N0IHx8IChpc1JlZGlyZWN0ICYmIHRhcmdl
dEhvc3QgPT0gcmVkaXJlY3RlZEZyb21VUkwuaG9zdCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVnaXN0cmFibGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07Ci0gICAgUmVn
aXN0cmFibGVEb21haW4gdG9wRnJhbWVEb21haW4geyB0b3BGcmFtZVVSTCB9OwotICAgIFJlZ2lz
dHJhYmxlRG9tYWluIHJlZGlyZWN0ZWRGcm9tRG9tYWluIHsgcmVkaXJlY3RlZEZyb21VUkwgfTsK
LQotICAgIGlmICh0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW4gfHwgKGlzUmVkaXJlY3Qg
JiYgdGFyZ2V0RG9tYWluID09IHJlZGlyZWN0ZWRGcm9tRG9tYWluKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgewotICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklEKCksIHRhcmdl
dERvbWFpbik7Ci0gICAgICAgIGF1dG8gbGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
OjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOwotICAgICAgICB0YXJnZXRT
dGF0aXN0aWNzLmxhc3RTZWVuID0gbGFzdFNlZW47Ci0gICAgICAgIHRhcmdldFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVEb21haW4pOwotCi0g
ICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAo
aXNSZWRpcmVjdCkgewotICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihwYWdlLT5zZXNz
aW9uSUQoKSwgcmVkaXJlY3RlZEZyb21Eb21haW4pOwotICAgICAgICByZWRpcmVjdGluZ09yaWdp
blN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFyZ2V0RG9tYWlu
KTsKLSAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCB0YXJnZXREb21haW4p
OwotICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bS5hZGQocmVkaXJlY3RlZEZyb21Eb21haW4pOwotCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0
aW9uSWZOZWVkZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6Omxv
Z1dlYlNvY2tldExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNvbnN0IFVSTCYgbWFpbkZy
YW1lVVJMLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi17Ci0gICAgaWYgKCFzaG91bGRMb2co
c2Vzc2lvbklEKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0YXJnZXRIb3N0ID0gdGFy
Z2V0VVJMLmhvc3QoKTsKLSAgICBhdXRvIG1haW5GcmFtZUhvc3QgPSBtYWluRnJhbWVVUkwuaG9z
dCgpOwotICAgIAotICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCBtYWluRnJhbWVIb3N0
LmlzRW1wdHkoKSB8fCB0YXJnZXRIb3N0ID09IG1haW5GcmFtZUhvc3QpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBSZWdpc3RyYWJsZURvbWFpbiB0YXJnZXREb21haW4geyB0YXJnZXRVUkwg
fTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IG1haW5GcmFtZVVSTCB9
OwotCi0gICAgaWYgKHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBsYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVj
ZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0KLSAgICBhdXRvJiB0YXJnZXRTdGF0
aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc2Vz
c2lvbklELCB0YXJnZXREb21haW4pOwotICAgIHRhcmdldFN0YXRpc3RpY3MubGFzdFNlZW4gPSBs
YXN0U2VlbjsKLSAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsKLQotICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZO
ZWVkZWQoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nVXNlckludGVyYWN0
aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCi17
Ci0gICAgaWYgKCFkb2N1bWVudC5zZXNzaW9uSUQoKS5pc1ZhbGlkKCkgfHwgIXNob3VsZExvZyhk
b2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHVybCA9
IGRvY3VtZW50LnVybCgpOwotICAgIGlmICh1cmwucHJvdG9jb2xJc0Fib3V0KCkgfHwgdXJsLmlz
TG9jYWxGaWxlKCkgfHwgdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVn
aXN0cmFibGVEb21haW4gdG9wRnJhbWVEb21haW4geyB1cmwgfTsKLSAgICBhdXRvIG5ld1RpbWUg
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6
bm93KCkpOwotICAgIGF1dG8gbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uID0gbV9sYXN0UmVw
b3J0ZWRVc2VySW50ZXJhY3Rpb25NYXAuZ2V0KHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAobmV3
VGltZSA9PSBsYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwLnNldCh0b3BGcmFtZURvbWFpbiwg
bmV3VGltZSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCksIHRvcEZyYW1lRG9t
YWluKTsKLSAgICBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0gICAgc3Rh
dGlzdGljcy5sYXN0U2VlbiA9IG5ld1RpbWU7Ci0gICAgc3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSA9IG5ld1RpbWU7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIG9wZW5lciA9IGZyYW1lLT5sb2FkZXIoKS5vcGVuZXIoKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckRvY3VtZW50ID0gb3BlbmVyLT5kb2N1bWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckZyYW1lID0gb3BlbmVyRG9jdW1lbnQt
PmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gb3BlbmVyUGFnZUlEID0g
b3BlbmVyRnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLnBhZ2VJRCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihkb2N1bWVudC5zZXNzaW9u
SUQoKSwgdG9wRnJhbWVEb21haW4sIG9wZW5lclBhZ2VJRC52YWx1ZSgpLCAqb3BlbmVyRG9jdW1l
bnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFdlIG5vdGlmeSByaWdodCBhd2F5IGluIGNhc2Ugb2YgYSB1c2VyIGludGVyYWN0
aW9uIGluc3RlYWQgb2Ygd2FpdGluZyB0aGUgdXN1YWwgNSBzZWNvbmRzIGJlY2F1c2Ugd2Ugd2Fu
dAotICAgIC8vIHRvIHVwZGF0ZSBjb29raWUgYmxvY2tpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBw
b3NzaWJsZS4KLSAgICBtX2xvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKGRv
Y3VtZW50LnNlc3Npb25JRCgpLCB0b3BGcmFtZURvbWFpbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpICYmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAg
IGlmIChzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24oKSkgewotICAgICAgICBhdXRvIGNvdW50ZXIg
PSArK21fbG9nZ2luZ0NvdW50ZXI7Ci0jZGVmaW5lIExPQ0FMX0xPRyhzdHIsIC4uLikgXAotICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbjogY291bnRlciA9ICUiIFBSSXU2NCAiOiAiIHN0ciwg
Y291bnRlciwgIyNfX1ZBX0FSR1NfXykKLQotICAgICAgICBhdXRvIGVzY2FwZUZvckpTT04gPSBb
XShTdHJpbmcgcykgewotICAgICAgICAgICAgcy5yZXBsYWNlKCdcXCcsICJcXFxcIikucmVwbGFj
ZSgnIicsICJcXFwiIik7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfTsKLSAgICAg
ICAgYXV0byBlc2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwuc3RyaW5nKCkpOwotICAgICAg
ICBhdXRvIGVzY2FwZWREb21haW4gPSBlc2NhcGVGb3JKU09OKHRvcEZyYW1lRG9tYWluLnN0cmlu
ZygpKTsKLQotICAgICAgICBMT0NBTF9MT0coUiIoeyAidXJsIjogIiV7cHVibGljfXMiLCkiLCBl
c2NhcGVkVVJMLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBMT0NBTF9MT0coUiIoICAiZG9tYWlu
IiA6ICIle3B1YmxpY31zIiwpIiwgZXNjYXBlZERvbWFpbi51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgTE9DQUxfTE9HKFIiKCAgInVudGlsIiA6ICVmIH0pIiwgbmV3VGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLnNlY29uZHMoKSk7Ci0KLSN1bmRlZiBMT0NBTF9MT0cKLSAgICB9Ci0jZW5kaWYKLX0K
LQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi12b2lkIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBEb2N1bWVudCYgb3BlbmVyRG9j
dW1lbnQpCi17Ci0gICAgYXV0byBvcGVuZXJVcmwgPSBvcGVuZXJEb2N1bWVudC51cmwoKTsKLSAg
ICBSZWdpc3RyYWJsZURvbWFpbiBvcGVuZXJEb21haW4geyBvcGVuZXJVcmwgfTsKLSAgICBpZiAo
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbgotICAgICAgICAmJiAh
b3BlbmVyRG9jdW1lbnQuaGFzUmVxdWVzdGVkUGFnZVNwZWNpZmljU3RvcmFnZUFjY2Vzc1dpdGhV
c2VySW50ZXJhY3Rpb24oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKQotICAgICAgICAmJiAh
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShvcGVuZXJVcmwuc3RyaW5nKCksIFdURjo6YmxhbmtVUkwo
KSkpIHsKLSAgICAgICAgbV9yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2so
c2Vzc2lvbklELCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIG9wZW5lclBhZ2VJRCwgb3Bl
bmVyRG9tYWluKTsKLSAgICAgICAgLy8gUmVtZW1iZXIgdXNlciBpbnRlcmFjdGlvbi1iYXNlZCBy
ZXF1ZXN0cyBzaW5jZSB0aGV5IGRvbid0IG5lZWQgdG8gYmUgcmVwZWF0ZWQuCi0gICAgICAgIG9w
ZW5lckRvY3VtZW50LnNldEhhc1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRo
VXNlckludGVyYWN0aW9uKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7Ci0gICAgfQotfQot
I2VuZGlmCi0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ0ZvbnRMb2FkKGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0
dXMpCi17Ci0jaWYgRU5BQkxFKFdFQl9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExv
Zyhkb2N1bWVudC5zZXNzaW9uSUQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJs
ZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7Ci0gICAgaWYgKCFsb2FkU3RhdHVzKSB7
Ci0gICAgICAgIGlmIChzdGF0aXN0aWNzLmZvbnRzRmFpbGVkVG9Mb2FkLmFkZChmYW1pbHlOYW1l
KS5pc05ld0VudHJ5KQotICAgICAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNr
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGlzdGljcy5mb250c1N1Y2Nl
c3NmdWxseUxvYWRlZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHNo
b3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJh
YmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1l
bnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21h
aW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJh
Y2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAg
ICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZmFtaWx5TmFtZSk7Ci0gICAgVU5VU0VE
X1BBUkFNKGxvYWRTdGF0dXMpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIFJlc291cmNlTG9hZE9i
c2VydmVyOjpsb2dDYW52YXNSZWFkKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3N0YXRpYyBS
ZXNvdXJjZUxvYWRPYnNlcnZlciomIHNoYXJlZE9ic2VydmVyKCkKIHsKLSNpZiBFTkFCTEUoV0VC
X0FQSV9TVEFUSVNUSUNTKQotICAgIGlmICghc2hvdWxkTG9nKGRvY3VtZW50LnNlc3Npb25JRCgp
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluIHsgZG9jdW1lbnQudXJsKCkgfTsKLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9jdW1lbnQuc2Vzc2lvbklEKCks
IHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdp
c3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKLSAgICBzdGF0
aXN0aWNzLmNhbnZhc0FjdGl2aXR5UmVjb3JkLndhc0RhdGFSZWFkID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElz
LmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKLSAg
ICAgICAgc2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oZG9jdW1lbnQpOwotI2VuZGlmCisgICAgc3RhdGljIFJlc291cmNlTG9hZE9ic2VydmVy
KiBvYnNlcnZlciA9IG51bGxwdHI7CisgICAgcmV0dXJuIG9ic2VydmVyOwogfQogCi12b2lkIFJl
c291cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pCi17Ci0jaWYgRU5BQkxFKFdF
Ql9BUElfU1RBVElTVElDUykKLSAgICBpZiAoIXNob3VsZExvZyhkb2N1bWVudC5zZXNzaW9uSUQo
KSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURv
bWFpbiB7IGRvY3VtZW50LnVybCgpIH07Ci0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50LnNlc3Npb25JRCwg
cmVnaXN0cmFibGVEb21haW4pOwotICAgIGJvb2wgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxi
YWNrID0gZmFsc2U7Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbWFpbkZyYW1lUmVnaXN0cmFibGVE
b21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgpIH07Ci0gICAgaWYgKHN0YXRpc3Rp
Y3MuY2FudmFzQWN0aXZpdHlSZWNvcmQucmVjb3JkV3JpdHRlbk9yTWVhc3VyZWRUZXh0KHRleHRX
cml0dGVuKSkKLSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsK
LSAgICBpZiAoc3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNz
ZWRXZWJBUElzLmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdF
bnRyeSkKLSAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKLSAg
ICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrKQotICAgICAgICBzY2hlZHVsZU5v
dGlmaWNhdGlvbklmTmVlZGVkKCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHRleHRXcml0dGVuKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBS
ZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9yQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkg
ZnVuY3Rpb25OYW1lKQotewotI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYg
KCFzaG91bGRMb2coZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAg
UmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9Owot
ICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBi
b29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3Rh
dGlzdGljcy5uYXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUp
KSB7Ci0gICAgICAgIHN0YXRpc3RpY3MubmF2aWdhdG9yRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1
bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRy
dWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9t
YWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNz
LnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5G
cmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQotICAgICAgICBzaG91
bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQo
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0o
ZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAgIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNlcnZl
cjo6bG9nU2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkgZnVuY3Rpb25OYW1lKQotewotI2lmIEVO
QUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCi0gICAgaWYgKCFzaG91bGRMb2coZG9jdW1lbnQuc2Vz
c2lvbklEKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0
cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OwotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNz
aW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRp
b25DYWxsYmFjayA9IGZhbHNlOwotICAgIGlmICghc3RhdGlzdGljcy5zY3JlZW5GdW5jdGlvbnNB
Y2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7Ci0gICAgICAgIHN0YXRpc3RpY3Muc2Ny
ZWVuRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIHNob3VsZENh
bGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7Ci0gICAgfQotICAgIFJlZ2lzdHJhYmxlRG9t
YWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS51
cmwoKSB9OwotICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVnaXN0cmFibGVEb21haW5zV2hp
Y2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygp
KS5pc05ld0VudHJ5KQotICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2sgPSB0
cnVlOwotICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2FsbGJhY2spCi0gICAgICAgIHNj
aGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRv
Y3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1lKTsKLSNlbmRpZgotfQotICAg
IAotUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OnNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZlciYgb2JzZXJ2ZXIpCiB7Ci0g
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5z
dXJlKHNlc3Npb25JRCwgW10gewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIYXNoTWFwPFJl
Z2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4oKTsKLSAgICB9KTsKLQot
ICAgIGF1dG8gYWRkRG9tYWluUmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZW5z
dXJlKGRvbWFpbiwgWyZkb21haW5dIHsKLSAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoZG9tYWluKTsKLSAgICB9KTsKLSAgICByZXR1cm4gYWRkRG9tYWluUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2hhcmVkT2JzZXJ2ZXIoKSk7CisgICAg
c2hhcmVkT2JzZXJ2ZXIoKSA9ICZvYnNlcnZlcjsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRlZCgpCi17Ci0gICAgQVNTRVJUKG1fbm90
aWZpY2F0aW9uQ2FsbGJhY2spOwotICAgIGlmIChtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RvcCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX25vdGlmaWNhdGlvblRpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fbm90aWZpY2F0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1pbmlt
dW1Ob3RpZmljYXRpb25JbnRlcnZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnVwZGF0ZUNlbnRyYWxTdGF0aXN0aWNzU3RvcmUoKQotewotICAgIEFTU0VSVChtX25vdGlmaWNh
dGlvbkNhbGxiYWNrKTsKLSAgICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKLSAgICBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrKHRha2VTdGF0aXN0aWNzKCkpOwotfQotCi1TdHJpbmcgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBhdXRvKiByZXNvdXJjZVN0YXRpc3RpY3NCeURvbWFp
biA9IG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5nZXQoc2Vzc2lvbklEKTsKLSAg
ICBpZiAoIXJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluKQotICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLQotICAgIGF1dG8gaXRlciA9IHJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluLT5m
aW5kKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOwotICAgIGlmIChpdGVyID09IHJlc291cmNl
U3RhdGlzdGljc0J5RG9tYWluLT5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0KLSAgICByZXR1cm4gbWFrZVN0cmluZygiU3RhdGlzdGljcyBmb3IgIiwgdXJsLmhvc3QoKS50
b1N0cmluZygpLCAiOlxuIiwgaXRlci0+dmFsdWUudG9TdHJpbmcoKSk7Ci19Ci0KLWF1dG8gUmVz
b3VyY2VMb2FkT2JzZXJ2ZXI6OnRha2VTdGF0aXN0aWNzKCkgLT4gUGVyU2Vzc2lvblJlc291cmNl
TG9hZERhdGEKLXsKLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSBwZXJTZXNzaW9uU3Rh
dGlzdGljczsKLQotICAgIGZvciAoYXV0byYgaXRlciA6IG1fcGVyU2Vzc2lvblJlc291cmNlU3Rh
dGlzdGljc01hcCkgewotICAgICAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gc3Rh
dGlzdGljczsKLSAgICAgICAgc3RhdGlzdGljcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0ZXIu
dmFsdWUtPnNpemUoKSk7Ci0KLSAgICAgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBpdGVyLnZh
bHVlLT52YWx1ZXMoKSkKLSAgICAgICAgICAgIHN0YXRpc3RpY3MudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoc3RhdGlzdGljKSk7Ci0KLSAgICAgICAgcGVyU2Vzc2lvblN0YXRpc3RpY3MuYXBwZW5k
KHN0ZDo6bWFrZV9wYWlyKGl0ZXIua2V5LCBXVEZNb3ZlKHN0YXRpc3RpY3MpKSk7Ci0gICAgfQot
ICAgIAotICAgIG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAg
IHJldHVybiBwZXJTZXNzaW9uU3RhdGlzdGljczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRPYnNl
cnZlcjo6Y2xlYXJTdGF0ZSgpCi17Ci0gICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7Ci0g
ICAgbV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9sYXN0
UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb25NYXAuY2xlYXIoKTsKLX0KLQotVVJMIFJlc291cmNlTG9h
ZE9ic2VydmVyOjpub25OdWxsT3duZXJVUkwoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSBjb25z
dAorUmVzb3VyY2VMb2FkT2JzZXJ2ZXImIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKQog
ewotICAgIGF1dG8gdXJsID0gZG9jdW1lbnQudXJsKCk7Ci0gICAgYXV0byogZnJhbWUgPSBkb2N1
bWVudC5mcmFtZSgpOwotICAgIGF1dG8gaG9zdCA9IGRvY3VtZW50LnVybCgpLmhvc3QoKTsKLQot
ICAgIHdoaWxlICgoaG9zdC5pc051bGwoKSB8fCBob3N0LmlzRW1wdHkoKSkgJiYgZnJhbWUgJiYg
IWZyYW1lLT5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGZy
YW1lLT5vd25lckVsZW1lbnQoKTsKLQotICAgICAgICBBU1NFUlQob3duZXJFbGVtZW50ICE9IG51
bGxwdHIpOwotICAgICAgICAKLSAgICAgICAgYXV0byYgZG9jID0gb3duZXJFbGVtZW50LT5kb2N1
bWVudCgpOwotICAgICAgICBmcmFtZSA9IGRvYy5mcmFtZSgpOwotICAgICAgICB1cmwgPSBkb2Mu
dXJsKCk7Ci0gICAgICAgIGhvc3QgPSB1cmwuaG9zdCgpOwotICAgIH0KLQotICAgIHJldHVybiB1
cmw7CisgICAgaWYgKCFzaGFyZWRPYnNlcnZlcigpKQorICAgICAgICBzaGFyZWRPYnNlcnZlcigp
ID0gbmV3IFJlc291cmNlTG9hZE9ic2VydmVyOworICAgIHJldHVybiAqc2hhcmVkT2JzZXJ2ZXIo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1Jlc291cmNlTG9hZE9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAppbmRleCA3NTcxZjE2NzUzMWY3MTlmNzY5YTYwZmVkZmQ2
MmQ0NDczNmVhN2I1Li44ODI4MGE5ZjE5OWM3ZGQwOGE1NjcxNDYyZDc5NWVkODRmYzdkNDI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuaApAQCAtMjUs
OTEgKzI1LDQxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ2FudmFzQWN0aXZpdHlS
ZWNvcmQuaCIKLSNpbmNsdWRlICJQYWdlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3MuaCIKLSNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHBhbC9TZXNz
aW9uSUQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3MgTG9jazsKLWNsYXNzIFdvcmtR
dWV1ZTsKLWNsYXNzIFdhbGxUaW1lOwotfQorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNz
IFBhZ2U7Ci1jbGFzcyBSZWdpc3RyYWJsZURvbWFpbjsKIGNsYXNzIFJlc291cmNlUmVxdWVzdDsK
IGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owot
Ci1zdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogY2xhc3MgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIgewotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJlc291cmNlTG9h
ZE9ic2VydmVyPjsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1
c2luZyBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSA9IFZlY3RvcjxzdGQ6OnBhaXI8UEFMOjpT
ZXNzaW9uSUQsIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4+OwogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZXNvdXJjZUxvYWRPYnNlcnZlciYgc2hhcmVkKCk7Ci0KLSAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBGcmFtZSosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgbmV3UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7
Ci0gICAgdm9pZCBsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFVSTCYgdGFyZ2V0VVJMLCBjb25z
dCBVUkwmIG1haW5GcmFtZVVSTCwgUEFMOjpTZXNzaW9uSUQpOwotICAgIHZvaWQgbG9nVXNlcklu
dGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZChSZXNvdXJjZUxvYWRPYnNlcnZl
ciYpOworICAgIAorICAgIHZpcnR1YWwgflJlc291cmNlTG9hZE9ic2VydmVyKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IEZyYW1lKiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiAvKiBuZXdSZXF1ZXN0ICovLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiAvKiByZWRpcmVjdFJlc3BvbnNlICovKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBVUkwmIC8qIHRhcmdldFVSTCAqLywgY29uc3QgVVJMJiAvKiBtYWlu
RnJhbWVVUkwgKi8sIFBBTDo6U2Vzc2lvbklEKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbG9nVXNl
ckludGVyYWN0aW9uV2l0aFJlZHVjZWRUaW1lUmVzb2x1dGlvbihjb25zdCBEb2N1bWVudCYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBsb2dGb250TG9hZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgLyogZmFtaWx5TmFtZSAqLywgYm9vbCAvKiBsb2FkU3RhdHVzICovKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbG9nQ2FudmFzUmVhZChjb25zdCBEb2N1bWVudCYpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgLyogdGV4dFdyaXR0ZW4gKi8pIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsb2dOYXZpZ2F0
b3JBUElBY2Nlc3NlZChjb25zdCBEb2N1bWVudCYsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6Ok5hdmlnYXRvckFQSSkgeyB9CisgICAgdmlydHVhbCB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vz
c2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVu
QVBJKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHN0YXRpc3RpY3NGb3JVUkwoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFVSTCYpIHsgcmV0dXJuIHsgfTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFyU3Rh
dGUoKSB7IH0KICAgICAKLSAgICB2b2lkIGxvZ0ZvbnRMb2FkKGNvbnN0IERvY3VtZW50JiwgY29u
c3QgU3RyaW5nJiBmYW1pbHlOYW1lLCBib29sIGxvYWRTdGF0dXMpOwotICAgIHZvaWQgbG9nQ2Fu
dmFzUmVhZChjb25zdCBEb2N1bWVudCYpOwotICAgIHZvaWQgbG9nQ2FudmFzV3JpdGVPck1lYXN1
cmUoY29uc3QgRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIHRleHRXcml0dGVuKTsKLSAgICB2b2lk
IGxvZ05hdmlnYXRvckFQSUFjY2Vzc2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6TmF2aWdhdG9yQVBJKTsKLSAgICB2b2lkIGxvZ1NjcmVlbkFQSUFjY2Vz
c2VkKGNvbnN0IERvY3VtZW50JiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6U2NyZWVu
QVBJKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdGF0aXN0aWNzRm9yVVJMKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBVUkwmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Rh
dGlzdGljc1VwZGF0ZWRDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBlclNlc3Npb25SZXNvdXJjZUxv
YWREYXRhJiYpPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlcXVlc3RTdG9yYWdl
QWNjZXNzVW5kZXJPcGVuZXJDYWxsYmFjayhGdW5jdGlvbjx2b2lkKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFBhZ2VJZGVudGlmaWVyLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpPiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ1VzZXJJbnRlcmFj
dGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+JiYpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
bGVhclN0YXRlKCk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKSAmJiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBib29sIHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uOyB9Ci0gICAgdm9pZCBz
ZXRTaG91bGRMb2dVc2VySW50ZXJhY3Rpb24oYm9vbCBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb24p
IHsgbV9zaG91bGRMb2dVc2VySW50ZXJhY3Rpb24gPSBzaG91bGRMb2dVc2VySW50ZXJhY3Rpb247
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFJlc291cmNlTG9hZE9ic2VydmVyKCk7Ci0KLSAg
ICBib29sIHNob3VsZExvZyhQQUw6OlNlc3Npb25JRCkgY29uc3Q7Ci0gICAgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzY2hl
ZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7Ci0KLSAgICBQZXJTZXNzaW9uUmVzb3VyY2VMb2Fk
RGF0YSB0YWtlU3RhdGlzdGljcygpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgRG9jdW1lbnQmIG9wZW5lckRvY3VtZW50
KTsKLSNlbmRpZgotCi0gICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRy
PEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+Pj4gbV9w
ZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotICAgIEhhc2hNYXA8UmVnaXN0cmFibGVE
b21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlckludGVyYWN0aW9uTWFwOwot
ICAgIEZ1bmN0aW9uPHZvaWQoUGVyU2Vzc2lvblJlc291cmNlTG9hZERhdGEpPiBtX25vdGlmaWNh
dGlvbkNhbGxiYWNrOwotICAgIEZ1bmN0aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgUGFnZUlkZW50aWZpZXIsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jik+IG1fcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lckNhbGxiYWNrOwotICAgIEZ1bmN0
aW9uPHZvaWQoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik+IG1fbG9n
VXNlckludGVyYWN0aW9uTm90aWZpY2F0aW9uQ2FsbGJhY2s7Ci0KLSAgICBUaW1lciBtX25vdGlm
aWNhdGlvblRpbWVyOwotCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykgJiYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgdWludDY0X3QgbV9sb2dnaW5nQ291bnRlciB7IDAg
fTsKLSAgICBib29sIG1fc2hvdWxkTG9nVXNlckludGVyYWN0aW9uIHsgZmFsc2UgfTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTG9nVXNlckludGVyYWN0aW9uKGJvb2wpIHsgfQogI2VuZGlm
Ci0KLSAgICBVUkwgbm9uTnVsbE93bmVyVVJMKGNvbnN0IERvY3VtZW50JikgY29uc3Q7CiB9Owog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzLmgKaW5kZXggNjIwZDEyYTE4YWVmOTJhNjJkNWZjNzRhN2Mz
YWFiN2E5NzZlNzk0NC4uNzg1OTlmODkzNzhlNjQ4NWE5NDhlOGRiOGJiNjdkNTJkY2I4ZGM4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZXByZWNhdGVkR2xvYmFsU2V0dGluZ3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlcHJlY2F0ZWRHbG9iYWxTZXR0aW5ncy5oCkBA
IC0xMzQsNyArMTM0LDcgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBnTWFuYWdlQXVkaW9TZXNzaW9uOwogCiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9B
dWRpb0J1ZmZlclNpemVFbmFibGVkOwotICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZEVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWxs
b3dzQW55U1NMQ2VydGlmaWNhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IGFjM2EyMWExZDQ3OGU2NWIyNDFmNjUzODMzYjU5YjlmZjQ1M2Q0MTEuLjQ4MTNlNzg2NDI5
MGMzZDZkYTU3Njc3Mjc3ODdlYWRhMzE5NzljMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6bG9nVXNlckludGVyYWN0aW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwKICAgICB9CiB9
CiAKLXZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlc291cmNlTG9hZFN0YXRp
c3RpY3NVcGRhdGVkKFJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2Fk
RGF0YSYmIHN0YXRpc3RpY3MpCit2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6UGVy
U2Vzc2lvblJlc291cmNlTG9hZERhdGEmJiBzdGF0aXN0aWNzKQogewogICAgIGZvciAoYXV0byYg
aXRlciA6IHN0YXRpc3RpY3MpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0g
bmV0d29ya1Byb2Nlc3MoKS5uZXR3b3JrU2Vzc2lvbihpdGVyLmZpcnN0KSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IDQyYzE3ZTFiMDViNDA2YjM5NGM5NTRhYjc5YzJhMzg2NDk5MjQx
MzQuLjA5YjZhMzUxODJkNTM3N2FmOGZkZjc4ZGZkYzhjMWU1YWE3YTQ2NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUlRDUHJv
dmlkZXIuaCIKICNpbmNsdWRlICJOZXR3b3JrUmVzb3VyY2VMb2FkTWFwLmgiCiAjaW5jbHVkZSAi
V2ViUGF5bWVudENvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9NZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvTWVzc2FnZVBvcnRJZGVudGlmaWVyLmg+CkBAIC00MSw3ICs0Miw2IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50
aWZpZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAKIG5hbWVzcGFjZSBQQUwgewpAQCAtMjM1LDcgKzIzNSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjbGVhclBhZ2VTcGVjaWZpY0RhdGFGb3JSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFBB
TDo6U2Vzc2lvbklELCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllcik7CiAKICAgICB2b2lkIGxvZ1Vz
ZXJJbnRlcmFjdGlvbihQQUw6OlNlc3Npb25JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsK
LSAgICB2b2lkIHJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYkNvcmU6OlJlc291cmNl
TG9hZE9ic2VydmVyOjpQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKKyAgICB2b2lkIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpQZXJT
ZXNzaW9uUmVzb3VyY2VMb2FkRGF0YSYmKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKICAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViUGFnZVByb3h5SWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCwgV2ViQ29yZTo6U3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duKT4mJik7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKFBBTDo6U2Vzc2lvbklELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYm
IGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgb3Bl
bmVyUGFnZUlELCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAppbmRleCBlYzY2NmJlMjAwMjdlNzljNGRkODdlMDdjZThjNWVjYjg5MDgzMGRhLi5k
MjUxYWZjYmUwMTUxZDU5NzUyZTM1OGZlYzUzNzI0ZTMzYjAxMGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAg
LTU1NCw2ICs1NTQsNyBAQCBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNw
cAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlByb2dyZXNzVHJhY2tlckNsaWVudC5jcHAKK1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAKIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViVXNlck1lZGlhQ2xpZW50LmNwcAogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MjcwZGY2YjZhYTcyM2U2N2M5NTUwNTYwZTcw
N2ZmOTg4ZDk5OWQ1Li43YjlhNjcyOTBjYTUxMGE2Y2RjZDIyZDg1ZGZlOTQ2NTY4NTc1MjAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTkxMCw2ICs5MTAsNyBAQAogCQk0NjU3RDg4QTIyNjY0QTJGMDA1REU4MjMgLyogV0tPcmllbnRh
dGlvbkFjY2Vzc0FsZXJ0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDY1N0Q4ODgyMjY2NEExQTAwNURFODIzIC8qIFdLT3JpZW50YXRpb25BY2Nlc3NB
bGVydC5tbSAqLzsgfTsKIAkJNDY1RjRFMDYyMzBCMkU5NTAwM0NFREI3IC8qIFN0b3JhZ2VOYW1l
c3BhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NjVGNEUwNTIzMEIyRTdDMDAzQ0VEQjcgLyogU3RvcmFnZU5hbWVzcGFjZUlkZW50
aWZpZXIuaCAqLzsgfTsKIAkJNDY2QkMwM0MxRkEyNjZEQTAwMkZBOUMxIC8qIFdlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjZCQzAzOTFGQTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdl
ckNvbm5lY3Rpb24uaCAqLzsgfTsKKwkJNDY3MUZGMUYyMzIxN0VGRjAwMUI2NEM3IC8qIFdlYlJl
c291cmNlTG9hZE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaCAqLzsgfTsKIAkJNDY3RTQzRTgyMjQzRkY3RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NE
YXRhU3RvcmVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NjdFNDNFNzIyNDNGRjZEMDBCMTM5MjQgLyogV2ViUHJvY2Vzc0RhdGFTdG9y
ZVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJNDZBMkI2MDkxRTU2NzZBNjAwQzNERURBIC8qIEJhY2tn
cm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZBMkI2MDcxRTU2NzVBMjAwQzNERURBIC8qIEJhY2tn
cm91bmRQcm9jZXNzUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovOyB9OwogCQk0NkIwNTI0NzIyNjY4
RDg1MDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkIw
NTI0NDIyNjY4RDIzMDAyNjVCOTcgLyogV2ViRGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nl
c3NDb250cm9sbGVyLmggKi87IH07CkBAIC0zMjE3LDYgKzMyMTgsOCBAQAogCQk0NjZCQzAzODFG
QTI2NkM5MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5l
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NjZCQzAzOTFGQTI2NkM5
MDAyRkE5QzEgLyogV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU1dDb250ZXh0TWFuYWdlckNvbm5lY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDY2QkMwM0ExRkEyNjZDOTAwMkZBOUMxIC8qIFdl
YlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NjcxRkYxRDIzMjE3RUZGMDAxQjY0QzcgLyogV2ViUmVz
b3VyY2VMb2FkT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VMb2FkT2JzZXJ2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDY3MUZGMUUyMzIxN0VGRjAwMUI2
NEM3IC8qIFdlYlJlc291cmNlTG9hZE9ic2VydmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlJlc291cmNlTG9hZE9ic2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDY3RTQzRTcyMjQzRkY2RDAwQjEzOTI0IC8qIFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NEYXRhU3RvcmVQ
YXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ2ODM1NjlBMjFFODFD
QzcwMDZFMjdBMyAvKiBQcm92aXNpb25hbFBhZ2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm92aXNpb25hbFBhZ2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NjgzNTY5QjIxRTgxQ0M3MDA2RTI3QTMgLyogUHJvdmlzaW9uYWxQYWdlUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvdmlzaW9uYWxQ
YWdlUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYyNSw2ICs3NjI4
LDggQEAKIAkJCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8s
CiAJCQkJMUExRTA5MzExODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJhY2tlckNsaWVu
dC5jcHAgKi8sCiAJCQkJMUExRTA5MzIxODg2MUQzODAwRDJEQzQ5IC8qIFdlYlByb2dyZXNzVHJh
Y2tlckNsaWVudC5oICovLAorCQkJCTQ2NzFGRjFFMjMyMTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNv
dXJjZUxvYWRPYnNlcnZlci5jcHAgKi8sCisJCQkJNDY3MUZGMUQyMzIxN0VGRjAwMUI2NEM3IC8q
IFdlYlJlc291cmNlTG9hZE9ic2VydmVyLmggKi8sCiAJCQkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8sCiAJCQkJRDNCOTQ4NDUxMUZGNEI2NTAw
MDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5oICovLAogCQkJCUMxNDkzODAzMjIzNDFERjcw
MDBDRDcwNyAvKiBXZWJTcGVlY2hTeW50aGVzaXNDbGllbnQuY3BwICovLApAQCAtOTk5Myw4ICs5
OTk4LDEwIEBACiAJCQkJNDYxQ0NDQTYyMzE0ODVBQTAwQjY1OUI5IC8qIFdlYlJlbW90ZU9iamVj
dFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk0ODQwNDE1MEMzNTA2MDBFNTJDRTkg
LyogV2ViUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3NjA4ODFGMTUwNDEzRTkw
MEZDODJDNyAvKiBXZWJSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1ODYwRTcx
MjMwRjY3RkMwMDQ2MUFBRSAvKiBXZWJSZXNvdXJjZUludGVyY2VwdENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMEFGRkJBMTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxv
YWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGMDYwRTAxNjU0MzE3RjAwRjMyODFCIC8qIFdl
YlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ2NzFGRjFGMjMy
MTdFRkYwMDFCNjRDNyAvKiBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0FGQkQzNjMyMUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzMDc1QjAxREU4NUY1ODAwMzlFQzY5IC8q
IFdlYlJUQ01vbml0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRkFGNUY1MUUzQzA2NDkwMDFB
RTY3OCAvKiBXZWJSVENSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDIxMSw3ICsxMDIx
OCw2IEBACiAJCQkJMEYzQzcyNUIxOTZGNjA0RTAwQUVERDBDIC8qIFdLSW5zcGVjdG9ySGlnaGxp
Z2h0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0MjkzQTQxOTVBNDNEQTAwMjc4MkM3IC8q
IFdLSW5zcGVjdG9yTm9kZVNlYXJjaEdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RUU4NDlDODEzNjhEOTM5MDAzOEQ0ODEgLyogV0tJbnNwZWN0b3JQcml2YXRlTWFjLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBNTg2MEU3MTIzMEY2N0ZDMDA0NjFBQUUgLyogV2ViUmVzb3Vy
Y2VJbnRlcmNlcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTRCQURGNDFGN0Q3
ODE0MDBCNTcxRTcgLyogV0tJbnNwZWN0b3JWaWV3Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTUxOEI1RDIxRkUxRDU1QjAwRjlGQTI4IC8qIFdLSW5zcGVjdG9yV0tXZWJWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyREQ1RTEyOTIxMEFEQzdCMDBEQjYwMTIgLyogV0tLZXlib2Fy
ZFNjcm9sbGluZ0FuaW1hdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VM
b2FkT2JzZXJ2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiNGI1ODQwN2UyNDRhYTNhY2M0ZmYwMTVlOTkx
NGE5MTYwMDQ4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIuY3BwCkBAIC0wLDAgKzEsMzkx
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJSZXNvdXJjZUxvYWRPYnNlcnZlci5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKKworI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EZXByZWNhdGVkR2xvYmFsU2V0dGlu
Z3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZUxvYWRlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGlj
IGNvbnN0IFNlY29uZHMgbWluaW11bU5vdGlmaWNhdGlvbkludGVydmFsIHsgNV9zIH07CisKK3N0
YXRpYyBib29sIGlzM3h4UmVkaXJlY3QoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgcmV0dXJuIHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPj0gMzAwICYmIHJlc3Bv
bnNlLmh0dHBTdGF0dXNDb2RlKCkgPD0gMzk5OworfQorCitzdGF0aWMgYm9vbCBzaG91bGRMb2dS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAgICBy
ZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjpyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZCgpICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsKK30KKworV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OldlYlJlc291cmNlTG9hZE9ic2VydmVyKCkKKyAgICA6IG1fbm90aWZpY2F0aW9u
VGltZXIoKnRoaXMsICZXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRlQ2VudHJhbFN0YXRp
c3RpY3NTdG9yZSkKK3sKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIFBhZ2VJZGVu
dGlmaWVyIG9wZW5lclBhZ2VJRCwgRG9jdW1lbnQmIG9wZW5lckRvY3VtZW50KQoreworICAgIGF1
dG8gb3BlbmVyVXJsID0gb3BlbmVyRG9jdW1lbnQudXJsKCk7CisgICAgUmVnaXN0cmFibGVEb21h
aW4gb3BlbmVyRG9tYWluIHsgb3BlbmVyVXJsIH07CisgICAgaWYgKGRvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyAhPSBvcGVuZXJEb21haW4KKyAgICAgICAgJiYgIW9wZW5lckRvY3VtZW50Lmhh
c1JlcXVlc3RlZFBhZ2VTcGVjaWZpY1N0b3JhZ2VBY2Nlc3NXaXRoVXNlckludGVyYWN0aW9uKGRv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcykKKyAgICAgICAgJiYgIWVxdWFsSWdub3JpbmdBU0NJ
SUNhc2Uob3BlbmVyVXJsLnN0cmluZygpLCBXVEY6OmJsYW5rVVJMKCkpKSB7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
UmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihzZXNzaW9uSUQsIGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2Vzcywgb3BlbmVyUGFnZUlELCBvcGVuZXJEb21haW4pLCAwKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFJlbWVtYmVyIHVzZXIgaW50ZXJhY3Rpb24tYmFzZWQgcmVxdWVzdHMgc2lu
Y2UgdGhleSBkb24ndCBuZWVkIHRvIGJlIHJlcGVhdGVkLgorICAgICAgICBvcGVuZXJEb2N1bWVu
dC5zZXRIYXNSZXF1ZXN0ZWRQYWdlU3BlY2lmaWNTdG9yYWdlQWNjZXNzV2l0aFVzZXJJbnRlcmFj
dGlvbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOworICAgIH0KK30KKyAgICAKK1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MmIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjplbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3BlclNlc3Npb25SZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5zdXJlKHNlc3Npb25JRCwgW10g
eworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4oKTsKKyAgICB9KTsKKworICAgIGF1dG8gYWRkRG9tYWlu
UmVzdWx0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+ZW5zdXJlKGRvbWFpbiwgWyZkb21h
aW5dIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9tYWluKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gYWRkRG9tYWluUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKK30KKwor
dm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2NoZWR1bGVOb3RpZmljYXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fcGVyU2Vzc2lvblJlc291cmNlU3RhdGlzdGljc01hcC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fbm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgbV9ub3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QobWluaW11bU5vdGlmaWNhdGlv
bkludGVydmFsKTsKK30KKwordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dXBkYXRlQ2Vu
dHJhbFN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAgbV9ub3RpZmljYXRpb25UaW1lci5zdG9wKCk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZCh0YWtlU3RhdGlzdGljcygpKSwg
MCk7Cit9CisKK1N0cmluZyBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c3RhdGlzdGljc0ZvclVS
TChQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGF1dG8q
IHJlc291cmNlU3RhdGlzdGljc0J5RG9tYWluID0gbV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0
aWNzTWFwLmdldChzZXNzaW9uSUQpOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWNzQnlEb21h
aW4pCisgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgYXV0byBpdGVyID0gcmVz
b3VyY2VTdGF0aXN0aWNzQnlEb21haW4tPmZpbmQoUmVnaXN0cmFibGVEb21haW4geyB1cmwgfSk7
CisgICAgaWYgKGl0ZXIgPT0gcmVzb3VyY2VTdGF0aXN0aWNzQnlEb21haW4tPmVuZCgpKQorICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJTdGF0
aXN0aWNzIGZvciAiLCB1cmwuaG9zdCgpLnRvU3RyaW5nKCksICI6XG4iLCBpdGVyLT52YWx1ZS50
b1N0cmluZygpKTsKK30KKworYXV0byBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6dGFrZVN0YXRp
c3RpY3MoKSAtPiBQZXJTZXNzaW9uUmVzb3VyY2VMb2FkRGF0YQoreworICAgIFBlclNlc3Npb25S
ZXNvdXJjZUxvYWREYXRhIHBlclNlc3Npb25TdGF0aXN0aWNzOworCisgICAgZm9yIChhdXRvJiBp
dGVyIDogbV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwKSB7CisgICAgICAgIFZlY3Rv
cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBzdGF0aXN0aWNzOworICAgICAgICBzdGF0aXN0aWNz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaXRlci52YWx1ZS0+c2l6ZSgpKTsKKworICAgICAgICBm
b3IgKGF1dG8mIHN0YXRpc3RpYyA6IGl0ZXIudmFsdWUtPnZhbHVlcygpKQorICAgICAgICAgICAg
c3RhdGlzdGljcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShzdGF0aXN0aWMpKTsKKworICAgICAg
ICBwZXJTZXNzaW9uU3RhdGlzdGljcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoaXRlci5rZXksIFdU
Rk1vdmUoc3RhdGlzdGljcykpKTsKKyAgICB9CisgICAgCisgICAgbV9wZXJTZXNzaW9uUmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7CisgICAgcmV0dXJuIHBlclNlc3Npb25TdGF0aXN0aWNz
OworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpjbGVhclN0YXRlKCkKK3sKKyAg
ICBtX25vdGlmaWNhdGlvblRpbWVyLnN0b3AoKTsKKyAgICBtX3BlclNlc3Npb25SZXNvdXJjZVN0
YXRpc3RpY3NNYXAuY2xlYXIoKTsKKyAgICBtX2xhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbk1h
cC5jbGVhcigpOworfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dGb250TG9h
ZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgYm9v
bCBsb2FkU3RhdHVzKQoreworI2lmIEVOQUJMRShXRUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgaWYg
KCFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKGRvY3VtZW50LnNlc3Npb25JRCgpKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21h
aW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJl
Z2lzdHJhYmxlRG9tYWluKTsKKyAgICBib29sIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFj
ayA9IGZhbHNlOworICAgIGlmICghbG9hZFN0YXR1cykgeworICAgICAgICBpZiAoc3RhdGlzdGlj
cy5mb250c0ZhaWxlZFRvTG9hZC5hZGQoZmFtaWx5TmFtZSkuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKHN0YXRpc3RpY3MuZm9udHNTdWNjZXNzZnVsbHlMb2FkZWQuYWRkKGZhbWls
eU5hbWUpLmlzTmV3RW50cnkpCisgICAgICAgICAgICBzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2Fs
bGJhY2sgPSB0cnVlOworICAgIH0KKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtYWluRnJhbWVSZWdp
c3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnRvcERvY3VtZW50KCkudXJsKCkgfTsKKyAgICBpZiAo
c3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJhYmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElz
LmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKKyAg
ICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICBpZiAoc2hv
dWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrKQorICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlv
bklmTmVlZGVkKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgVU5V
U0VEX1BBUkFNKGZhbWlseU5hbWUpOworICAgIFVOVVNFRF9QQVJBTShsb2FkU3RhdHVzKTsKKyNl
bmRpZgorfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nQ2FudmFzUmVh
ZChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCit7CisjaWYgRU5BQkxFKFdFQl9BUElfU1RBVElT
VElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3MoZG9jdW1lbnQu
c2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBy
ZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYgc3RhdGlzdGlj
cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvY3VtZW50
LnNlc3Npb25JRCgpLCByZWdpc3RyYWJsZURvbWFpbik7CisgICAgUmVnaXN0cmFibGVEb21haW4g
bWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgp
IH07CisgICAgc3RhdGlzdGljcy5jYW52YXNBY3Rpdml0eVJlY29yZC53YXNEYXRhUmVhZCA9IHRy
dWU7CisgICAgaWYgKHN0YXRpc3RpY3MudG9wRnJhbWVSZWdpc3RyYWJsZURvbWFpbnNXaGljaEFj
Y2Vzc2VkV2ViQVBJcy5hZGQobWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpLmlz
TmV3RW50cnkpCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJlc291
cmNlTG9hZE9ic2VydmVyOjpsb2dDYW52YXNXcml0ZU9yTWVhc3VyZShjb25zdCBEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dFdyaXR0ZW4pCit7CisjaWYgRU5BQkxFKFdFQl9B
UElfU1RBVElTVElDUykKKyAgICBpZiAoIXNob3VsZExvZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mo
ZG9jdW1lbnQuc2Vzc2lvbklEKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWdpc3RyYWJs
ZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbiB7IGRvY3VtZW50LnVybCgpIH07CisgICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvY3VtZW50LnNlc3Npb25JRCwgcmVnaXN0cmFibGVEb21haW4pOworICAgIGJvb2wgc2hvdWxk
Q2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNrID0gZmFsc2U7CisgICAgUmVnaXN0cmFibGVEb21haW4g
bWFpbkZyYW1lUmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC50b3BEb2N1bWVudCgpLnVybCgp
IH07CisgICAgaWYgKHN0YXRpc3RpY3MuY2FudmFzQWN0aXZpdHlSZWNvcmQucmVjb3JkV3JpdHRl
bk9yTWVhc3VyZWRUZXh0KHRleHRXcml0dGVuKSkKKyAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNh
dGlvbkNhbGxiYWNrID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGlzdGljcy50b3BGcmFtZVJlZ2lzdHJh
YmxlRG9tYWluc1doaWNoQWNjZXNzZWRXZWJBUElzLmFkZChtYWluRnJhbWVSZWdpc3RyYWJsZURv
bWFpbi5zdHJpbmcoKSkuaXNOZXdFbnRyeSkKKyAgICAgICAgc2hvdWxkQ2FsbE5vdGlmaWNhdGlv
bkNhbGxiYWNrID0gdHJ1ZTsKKyAgICBpZiAoc2hvdWxkQ2FsbE5vdGlmaWNhdGlvbkNhbGxiYWNr
KQorICAgICAgICBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShkb2N1bWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRleHRXcml0dGVuKTsKKyNl
bmRpZgorfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9nTmF2aWdhdG9y
QVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOjpOYXZpZ2F0b3JBUEkgZnVuY3Rpb25OYW1lKQoreworI2lmIEVOQUJMRShXRUJf
QVBJX1NUQVRJU1RJQ1MpCisgICAgaWYgKCFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KGRvY3VtZW50LnNlc3Npb25JRCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaXN0cmFi
bGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIGF1dG8m
IHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBib29sIHNob3Vs
ZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOworICAgIGlmICghc3RhdGlzdGljcy5u
YXZpZ2F0b3JGdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7CisgICAg
ICAgIHN0YXRpc3RpY3MubmF2aWdhdG9yRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFt
ZSk7CisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisgICAg
fQorICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9j
dW1lbnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1l
UmVnaXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90
aWZpY2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9u
Q2FsbGJhY2spCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25O
YW1lKTsKKyNlbmRpZgorfQorICAgIAordm9pZCBXZWJSZXNvdXJjZUxvYWRPYnNlcnZlcjo6bG9n
U2NyZWVuQVBJQWNjZXNzZWQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOjpTY3JlZW5BUEkgZnVuY3Rpb25OYW1lKQoreworI2lmIEVOQUJMRShX
RUJfQVBJX1NUQVRJU1RJQ1MpCisgICAgaWYgKCFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKGRvY3VtZW50LnNlc3Npb25JRCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVnaXN0
cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW4geyBkb2N1bWVudC51cmwoKSB9OworICAgIGF1
dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihkb2N1bWVudC5zZXNzaW9uSUQsIHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBib29sIHNo
b3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IGZhbHNlOworICAgIGlmICghc3RhdGlzdGlj
cy5zY3JlZW5GdW5jdGlvbnNBY2Nlc3NlZC5jb250YWlucyhmdW5jdGlvbk5hbWUpKSB7CisgICAg
ICAgIHN0YXRpc3RpY3Muc2NyZWVuRnVuY3Rpb25zQWNjZXNzZWQuYWRkKGZ1bmN0aW9uTmFtZSk7
CisgICAgICAgIHNob3VsZENhbGxOb3RpZmljYXRpb25DYWxsYmFjayA9IHRydWU7CisgICAgfQor
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1haW5GcmFtZVJlZ2lzdHJhYmxlRG9tYWluIHsgZG9jdW1l
bnQudG9wRG9jdW1lbnQoKS51cmwoKSB9OworICAgIGlmIChzdGF0aXN0aWNzLnRvcEZyYW1lUmVn
aXN0cmFibGVEb21haW5zV2hpY2hBY2Nlc3NlZFdlYkFQSXMuYWRkKG1haW5GcmFtZVJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKS5pc05ld0VudHJ5KQorICAgICAgICBzaG91bGRDYWxsTm90aWZp
Y2F0aW9uQ2FsbGJhY2sgPSB0cnVlOworICAgIGlmIChzaG91bGRDYWxsTm90aWZpY2F0aW9uQ2Fs
bGJhY2spCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25OYW1l
KTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlJlc291cmNlTG9hZE9ic2VydmVyOjpsb2dTdWJyZXNv
dXJjZUxvYWRpbmcoY29uc3QgRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCit7Cisg
ICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYXV0byogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlIHx8
ICFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKHBhZ2UtPnNlc3Npb25JRCgpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc1JlZGlyZWN0ID0gaXMzeHhSZWRpcmVjdChyZWRp
cmVjdFJlc3BvbnNlKTsKKyAgICBjb25zdCBVUkwmIHJlZGlyZWN0ZWRGcm9tVVJMID0gcmVkaXJl
Y3RSZXNwb25zZS51cmwoKTsKKyAgICBjb25zdCBVUkwmIHRhcmdldFVSTCA9IG5ld1JlcXVlc3Qu
dXJsKCk7CisgICAgY29uc3QgVVJMJiB0b3BGcmFtZVVSTCA9IGZyYW1lID8gZnJhbWUtPm1haW5G
cmFtZSgpLmRvY3VtZW50KCktPnVybCgpIDogVVJMKCk7CisgICAgCisgICAgYXV0byB0YXJnZXRI
b3N0ID0gdGFyZ2V0VVJMLmhvc3QoKTsKKyAgICBhdXRvIHRvcEZyYW1lSG9zdCA9IHRvcEZyYW1l
VVJMLmhvc3QoKTsKKworICAgIGlmICh0YXJnZXRIb3N0LmlzRW1wdHkoKSB8fCB0b3BGcmFtZUhv
c3QuaXNFbXB0eSgpIHx8IHRhcmdldEhvc3QgPT0gdG9wRnJhbWVIb3N0IHx8IChpc1JlZGlyZWN0
ICYmIHRhcmdldEhvc3QgPT0gcmVkaXJlY3RlZEZyb21VUkwuaG9zdCgpKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVnaXN0cmFibGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07
CisgICAgUmVnaXN0cmFibGVEb21haW4gdG9wRnJhbWVEb21haW4geyB0b3BGcmFtZVVSTCB9Owor
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZGlyZWN0ZWRGcm9tRG9tYWluIHsgcmVkaXJlY3RlZEZy
b21VUkwgfTsKKworICAgIGlmICh0YXJnZXREb21haW4gPT0gdG9wRnJhbWVEb21haW4gfHwgKGlz
UmVkaXJlY3QgJiYgdGFyZ2V0RG9tYWluID09IHJlZGlyZWN0ZWRGcm9tRG9tYWluKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgeworICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocGFnZS0+c2Vzc2lvbklE
KCksIHRhcmdldERvbWFpbik7CisgICAgICAgIGF1dG8gbGFzdFNlZW4gPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGltZTo6bm93KCkpOworICAgICAg
ICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gbGFzdFNlZW47CisgICAgICAgIHRhcmdldFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVEb21h
aW4pOworCisgICAgICAgIHNjaGVkdWxlTm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyAgICB9CisK
KyAgICBpZiAoaXNSZWRpcmVjdCkgeworICAgICAgICBhdXRvJiByZWRpcmVjdGluZ09yaWdpblN0
YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihw
YWdlLT5zZXNzaW9uSUQoKSwgcmVkaXJlY3RlZEZyb21Eb21haW4pOworICAgICAgICByZWRpcmVj
dGluZ09yaWdpblN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5hZGQodGFy
Z2V0RG9tYWluKTsKKyAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHBhZ2UtPnNlc3Npb25JRCgpLCB0YXJn
ZXREb21haW4pOworICAgICAgICB0YXJnZXRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5hZGQocmVkaXJlY3RlZEZyb21Eb21haW4pOworCisgICAgICAgIHNjaGVkdWxl
Tm90aWZpY2F0aW9uSWZOZWVkZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUmVzb3VyY2VMb2Fk
T2JzZXJ2ZXI6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNvbnN0
IFVSTCYgbWFpbkZyYW1lVVJMLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCit7CisgICAgaWYg
KCFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKHNlc3Npb25JRCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gdGFyZ2V0SG9zdCA9IHRhcmdldFVSTC5ob3N0KCk7CisgICAgYXV0
byBtYWluRnJhbWVIb3N0ID0gbWFpbkZyYW1lVVJMLmhvc3QoKTsKKyAgICAKKyAgICBpZiAodGFy
Z2V0SG9zdC5pc0VtcHR5KCkgfHwgbWFpbkZyYW1lSG9zdC5pc0VtcHR5KCkgfHwgdGFyZ2V0SG9z
dCA9PSBtYWluRnJhbWVIb3N0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVnaXN0cmFi
bGVEb21haW4gdGFyZ2V0RG9tYWluIHsgdGFyZ2V0VVJMIH07CisgICAgUmVnaXN0cmFibGVEb21h
aW4gdG9wRnJhbWVEb21haW4geyBtYWluRnJhbWVVUkwgfTsKKworICAgIGlmICh0YXJnZXREb21h
aW4gPT0gdG9wRnJhbWVEb21haW4pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGFzdFNl
ZW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGlt
ZTo6bm93KCkpOworCisgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNlc3Npb25JRCwgdGFyZ2V0RG9tYWluKTsK
KyAgICB0YXJnZXRTdGF0aXN0aWNzLmxhc3RTZWVuID0gbGFzdFNlZW47CisgICAgdGFyZ2V0U3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmFkZCh0b3BGcmFtZURvbWFp
bik7CisKKyAgICBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7Cit9CisKK3ZvaWQgV2Vi
UmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbldpdGhSZWR1Y2VkVGltZVJl
c29sdXRpb24oY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlmICghZG9jdW1lbnQu
c2Vzc2lvbklEKCkuaXNWYWxpZCgpIHx8ICFzaG91bGRMb2dSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KGRvY3VtZW50LnNlc3Npb25JRCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgdXJs
ID0gZG9jdW1lbnQudXJsKCk7CisgICAgaWYgKHVybC5wcm90b2NvbElzQWJvdXQoKSB8fCB1cmwu
aXNMb2NhbEZpbGUoKSB8fCB1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZWdpc3RyYWJsZURvbWFpbiB0b3BGcmFtZURvbWFpbiB7IHVybCB9OworICAgIGF1dG8gbmV3VGlt
ZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1l
Ojpub3coKSk7CisgICAgYXV0byBsYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb24gPSBtX2xhc3RS
ZXBvcnRlZFVzZXJJbnRlcmFjdGlvbk1hcC5nZXQodG9wRnJhbWVEb21haW4pOworICAgIGlmIChu
ZXdUaW1lID09IGxhc3RSZXBvcnRlZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9sYXN0UmVwb3J0ZWRVc2VySW50ZXJhY3Rpb25NYXAuc2V0KHRvcEZyYW1lRG9tYWlu
LCBuZXdUaW1lKTsKKworICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb2N1bWVudC5zZXNzaW9uSUQoKSwgdG9wRnJhbWVE
b21haW4pOworICAgIHN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKKyAgICBz
dGF0aXN0aWNzLmxhc3RTZWVuID0gbmV3VGltZTsKKyAgICBzdGF0aXN0aWNzLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lID0gbmV3VGltZTsKKworICAgIGlmIChhdXRvKiBmcmFtZSA9IGRv
Y3VtZW50LmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIG9wZW5lciA9IGZyYW1lLT5sb2Fk
ZXIoKS5vcGVuZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckRvY3VtZW50ID0g
b3BlbmVyLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG9wZW5lckZy
YW1lID0gb3BlbmVyRG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gb3BlbmVyUGFnZUlEID0gb3BlbmVyRnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLnBhZ2VJ
RCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcihkb2N1bWVudC5zZXNzaW9uSUQoKSwgdG9wRnJhbWVEb21haW4sIG9wZW5lclBhZ2VJRC52
YWx1ZSgpLCAqb3BlbmVyRG9jdW1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIG5vdGlmeSByaWdodCBhd2F5IGluIGNh
c2Ugb2YgYSB1c2VyIGludGVyYWN0aW9uIGluc3RlYWQgb2Ygd2FpdGluZyB0aGUgdXN1YWwgNSBz
ZWNvbmRzIGJlY2F1c2Ugd2Ugd2FudAorICAgIC8vIHRvIHVwZGF0ZSBjb29raWUgYmxvY2tpbmcg
c3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkxvZ1VzZXJJbnRlcmFjdGlvbihk
b2N1bWVudC5zZXNzaW9uSUQoKSwgdG9wRnJhbWVEb21haW4pLCAwKTsKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIGlmIChtX3Nob3VsZExvZ1VzZXJJbnRlcmFjdGlvbikgeworICAg
ICAgICBhdXRvIGNvdW50ZXIgPSArK21fbG9nZ2luZ0NvdW50ZXI7CisjZGVmaW5lIExPQ0FMX0xP
RyhzdHIsIC4uLikgXAorICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCAiUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1VzZXJJbnRlcmFjdGlvbjogY291bnRlciA9ICUi
IFBSSXU2NCAiOiAiIHN0ciwgY291bnRlciwgIyNfX1ZBX0FSR1NfXykKKworICAgICAgICBhdXRv
IGVzY2FwZUZvckpTT04gPSBbXShTdHJpbmcgcykgeworICAgICAgICAgICAgcy5yZXBsYWNlKCdc
XCcsICJcXFxcIikucmVwbGFjZSgnIicsICJcXFwiIik7CisgICAgICAgICAgICByZXR1cm4gczsK
KyAgICAgICAgfTsKKyAgICAgICAgYXV0byBlc2NhcGVkVVJMID0gZXNjYXBlRm9ySlNPTih1cmwu
c3RyaW5nKCkpOworICAgICAgICBhdXRvIGVzY2FwZWREb21haW4gPSBlc2NhcGVGb3JKU09OKHRv
cEZyYW1lRG9tYWluLnN0cmluZygpKTsKKworICAgICAgICBMT0NBTF9MT0coUiIoeyAidXJsIjog
IiV7cHVibGljfXMiLCkiLCBlc2NhcGVkVVJMLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBMT0NB
TF9MT0coUiIoICAiZG9tYWluIiA6ICIle3B1YmxpY31zIiwpIiwgZXNjYXBlZERvbWFpbi51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9DQUxfTE9HKFIiKCAgInVudGlsIiA6ICVmIH0pIiwgbmV3
VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7CisKKyN1bmRlZiBMT0NBTF9MT0cK
KyAgICB9CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNGJjYmNkODNlM2NjOGI4MjgzZjE1N2I4YTgyMmJlZDUzMjY1
YTllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlJlc291cmNlTG9hZE9ic2VydmVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VJZGVudGlmaWVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRPYnNlcnZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
UmVzb3VyY2VMb2FkT2JzZXJ2ZXIgeworcHVibGljOgorICAgIHVzaW5nIFBlclNlc3Npb25SZXNv
dXJjZUxvYWREYXRhID0gVmVjdG9yPHN0ZDo6cGFpcjxQQUw6OlNlc3Npb25JRCwgVmVjdG9yPFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+Pj47CisKKyAgICBXZWJSZXNvdXJjZUxvYWRP
YnNlcnZlcigpOworICAgIAorICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFdl
YkNvcmU6OkZyYW1lKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBmaW5h
bDsKKyAgICB2b2lkIGxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgVVJMJiB0YXJnZXRVUkwsIGNv
bnN0IFVSTCYgbWFpbkZyYW1lVVJMLCBQQUw6OlNlc3Npb25JRCkgZmluYWw7CisgICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb25XaXRoUmVkdWNlZFRpbWVSZXNvbHV0aW9uKGNvbnN0IFdlYkNvcmU6
OkRvY3VtZW50JikgZmluYWw7CisgICAgdm9pZCBsb2dGb250TG9hZChjb25zdCBXZWJDb3JlOjpE
b2N1bWVudCYsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgYm9vbCBsb2FkU3RhdHVzKSBmaW5h
bDsKKyAgICB2b2lkIGxvZ0NhbnZhc1JlYWQoY29uc3QgV2ViQ29yZTo6RG9jdW1lbnQmKSBmaW5h
bDsKKyAgICB2b2lkIGxvZ0NhbnZhc1dyaXRlT3JNZWFzdXJlKGNvbnN0IFdlYkNvcmU6OkRvY3Vt
ZW50JiwgY29uc3QgU3RyaW5nJiB0ZXh0V3JpdHRlbikgZmluYWw7CisgICAgdm9pZCBsb2dOYXZp
Z2F0b3JBUElBY2Nlc3NlZChjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYsIGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5hdmlnYXRvckFQSSkgZmluYWw7CisgICAgdm9pZCBs
b2dTY3JlZW5BUElBY2Nlc3NlZChjb25zdCBXZWJDb3JlOjpEb2N1bWVudCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M6OlNjcmVlbkFQSSkgZmluYWw7CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIHNldFNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbihi
b29sIHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbikgZmluYWwgeyBtX3Nob3VsZExvZ1VzZXJJbnRl
cmFjdGlvbiA9IHNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbjsgfQorI2VuZGlmCisKKyAgICBTdHJp
bmcgc3RhdGlzdGljc0ZvclVSTChQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJikgZmluYWw7Cisg
ICAgdm9pZCB1cGRhdGVDZW50cmFsU3RhdGlzdGljc1N0b3JlKCkgZmluYWw7CisgICAgdm9pZCBj
bGVhclN0YXRlKCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
UEFMOjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAg
dm9pZCBzY2hlZHVsZU5vdGlmaWNhdGlvbklmTmVlZGVkKCk7CisKKyAgICBQZXJTZXNzaW9uUmVz
b3VyY2VMb2FkRGF0YSB0YWtlU3RhdGlzdGljcygpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NVbmRlck9wZW5lcihQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXIgb3BlbmVyUGFnZUlELCBXZWJDb3JlOjpEb2N1bWVudCYgb3BlbmVyRG9jdW1lbnQpOwor
CisgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPEhhc2hNYXA8V2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+
Pj4gbV9wZXJTZXNzaW9uUmVzb3VyY2VTdGF0aXN0aWNzTWFwOworICAgIEhhc2hNYXA8V2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW4sIFdURjo6V2FsbFRpbWU+IG1fbGFzdFJlcG9ydGVkVXNlcklu
dGVyYWN0aW9uTWFwOworCisgICAgV2ViQ29yZTo6VGltZXIgbV9ub3RpZmljYXRpb25UaW1lcjsK
KworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHVpbnQ2NF90IG1fbG9nZ2luZ0NvdW50
ZXIgeyAwIH07CisgICAgYm9vbCBtX3Nob3VsZExvZ1VzZXJJbnRlcmFjdGlvbiB7IGZhbHNlIH07
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAppbmRleCA2NGFlMTIwZjliODk2NmFjMzAzYzU1ZDk0NzkzNDk4MDc3YjZkOGMwLi4x
MTU2MTVhMTM2M2YwZmU4ZjdhMWUwYzc5ZTM3ZDJlYjE4MTFiMjAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlv
bi5oIgogI2luY2x1ZGUgIldlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJXZWJTZXJ2aWNlV29ya2VyUHJvdmlkZXIuaCIKQEAgLTExMCw3ICsxMTEsNiBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0
cmFibGVEb21haW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZE9ic2VydmVyLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KQEAgLTIxNywxNiArMjE3LDcgQEAgV2ViUHJvY2Vzczo6
V2ViUHJvY2VzcygpCiAgICAgbV9wbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMuYWRkKFBBTDo6
U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWduZWQsIFdhbGxUaW1l
PigpKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgUmVzb3Vy
Y2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLnNldFN0YXRpc3RpY3NVcGRhdGVkQ2FsbGJhY2soW3Ro
aXNdIChhdXRvJiYgc3RhdGlzdGljcykgewotICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVkKFdURk1vdmUoc3RhdGlz
dGljcykpLCAwKTsKLSAgICB9KTsKLQotICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQo
KS5zZXRSZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyQ2FsbGJhY2soW3RoaXNdIChQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW5Jbk5l
ZWRPZlN0b3JhZ2VBY2Nlc3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIG9wZW5lckRvbWFpbikgewotICAgICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoc2Vzc2lv
bklELCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9t
YWluKSwgMCk7Ci0gICAgfSk7Ci0gICAgCi0gICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJl
ZCgpLnNldExvZ1VzZXJJbnRlcmFjdGlvbk5vdGlmaWNhdGlvbkNhbGxiYWNrKFt0aGlzXSAoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSB7
ICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6TG9nVXNlckludGVyYWN0aW9u
KHNlc3Npb25JRCwgZG9tYWluKSwgMCk7Ci0gICAgfSk7CisgICAgUmVzb3VyY2VMb2FkT2JzZXJ2
ZXI6OnNldFNoYXJlZCgqbmV3IFdlYlJlc291cmNlTG9hZE9ic2VydmVyKTsKICNlbmRpZgogICAg
IAogICAgIEdpZ2FjYWdlOjpkaXNhYmxlRGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJZlNob3Vs
ZEJlRW5hYmxlZCgpOwpAQCAtMTY1NSw3ICsxNjQ2LDkgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGVuYWJsZWQpCiAKIHZvaWQgV2ViUHJv
Y2Vzczo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKIHsKKyNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQogICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5j
bGVhclN0YXRlKCk7CisjZW5kaWYKIH0KIAogUmVmUHRyPEFQSTo6T2JqZWN0PiBXZWJQcm9jZXNz
Ojp0cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKEFQSTo6T2JqZWN0KiBvYmplY3QpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>