<?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>93164</bug_id>
          
          <creation_ts>2012-08-03 15:54:02 -0700</creation_ts>
          <short_desc>[Qt] UI_SIDE_COMPOSITING code has confusing names</short_desc>
          <delta_ts>2012-08-04 10:53:02 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>levin+threading</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>youngtaeck.song</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>687217</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 15:54:02 -0700</bug_when>
    <thetext>[Qt] UI_SIDE_COMPOSITING code has confusing names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687220</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 15:55:51 -0700</bug_when>
    <thetext>The idea is to use CoordinatedGraphics as the directory and USE(COORDINATED_GRAPHICS) instead of USE(UI_SIDE_COMPOSITING).

Renames:
LayerBackingStore -&gt; CoordinatedBackingStore
WebGraphicsLayer -&gt; CoordinatedGraphicsLayer
WebLayerTreeRenderer -&gt; LayerTreeRenderer
TiledBackingStoreRemoteTile -&gt; CoordinatedTile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687224</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-03 15:58:29 -0700</bug_when>
    <thetext>Yes sounds very good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687228</commentid>
    <comment_count>3</comment_count>
      <attachid>156473</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 16:03:47 -0700</bug_when>
    <thetext>Created attachment 156473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687243</commentid>
    <comment_count>4</comment_count>
      <attachid>156473</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-08-03 16:18:11 -0700</bug_when>
    <thetext>Comment on attachment 156473
Patch

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

I&apos;d appreciate if if you kept the file list in WebKit2/CMakeLists.txt alphabetically sorted.

&gt; Source/WebKit2/CMakeLists.txt:224
&gt; -    UIProcess/LayerTreeCoordinatorProxy.cpp
&gt; +    UIProcess/CoordinatedGraphics/ayerTreeCoordinatorProxy.cpp

Typo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687268</commentid>
    <comment_count>5</comment_count>
      <attachid>156481</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 16:46:38 -0700</bug_when>
    <thetext>Created attachment 156481
Fixed CMakeLists.txt alphabetical order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687272</commentid>
    <comment_count>6</comment_count>
      <attachid>156481</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-08-03 16:56:17 -0700</bug_when>
    <thetext>Comment on attachment 156481
Fixed CMakeLists.txt alphabetical order

Attachment 156481 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13430579</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687275</commentid>
    <comment_count>7</comment_count>
      <attachid>156484</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 17:06:41 -0700</bug_when>
    <thetext>Created attachment 156484
Removed unnecessary files from GTK build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687287</commentid>
    <comment_count>8</comment_count>
      <attachid>156484</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-03 17:28:45 -0700</bug_when>
    <thetext>Comment on attachment 156484
Removed unnecessary files from GTK build

Attachment 156484 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13431528</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687297</commentid>
    <comment_count>9</comment_count>
      <attachid>156490</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-08-03 17:41:32 -0700</bug_when>
    <thetext>Created attachment 156490
Renamed file in CMakeLists</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687466</commentid>
    <comment_count>10</comment_count>
      <attachid>156490</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-04 10:52:54 -0700</bug_when>
    <thetext>Comment on attachment 156490
Renamed file in CMakeLists

Clearing flags on attachment: 156490

Committed r124701: &lt;http://trac.webkit.org/changeset/124701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687467</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-04 10:53:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156473</attachid>
            <date>2012-08-03 16:03:47 -0700</date>
            <delta_ts>2012-08-03 16:46:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93164-20120803160226.patch</filename>
            <type>text/plain</type>
            <size>268341</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NjYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAxMTNlYjFjNjQ2MTYwNjdmZDAwZjhj
NTQ2MGVlNTlmMjY4Y2E3M2IuLjg0ZWJhYjM5M2MwMTY5MGEyMzA1YjRlZmU3YzJmNDEyNTM3Yzlm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDgtMDMgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFVJX1NJREVfQ09NUE9TSVRJ
TkcgY29kZSBoYXMgY29uZnVzaW5nIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgVUlfU0lERV9DT01QT1NJVElORyB0byBDT09SRElO
QVRFRF9HUkFQSElDUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEyLTA4LTAz
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTdHJp
bmdJbXBsIGNyZWF0ZWQgZnJvbSBsaXRlcmFsIHNob3VsZCBiZSBCdWZmZXJJbnRlcm5hbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDkzMWU2OWIwOWE4ZWM1ZjFjNzM5OGY2MmFjNTZkMDdlYjhjOWU4ODkuLjgzN2Ez
NmNiNTNiZTk3ZjgxNDA5OWY2MGQ1ZTIxYjMzYjQ2NzExZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NSBAQAorMjAxMi0wOC0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFtRdF0gVUlfU0lERV9DT01QT1NJVElORyBjb2RlIGhhcyBjb25m
dXNpbmcgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzMTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lZCBhbmQgY29uc29saWRhdGVkIGNvZGUgZ3VhcmRlZCB1bmRlciBVSV9TSURFX0NP
TVBPU0lUSU5HLCBub3cgdW5kZXIKKyAgICAgICAgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSBn
dWFyZCBhbmQgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xkZXJzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAo
UVJhd1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAg
IChEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDb250ZW50c1NHTm9kZTo6Q29udGVudHNTR05vZGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZW50c1NHTm9kZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoQ29udGVudHNT
R05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoUXRXZWJQYWdlU0dOb2RlKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVBbmltYXRpb24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGls
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2luZ0FyZWFJbXBs
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAg
ICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMi0wOC0wMyAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGhpbmcgaGFwcGVucyB3aGVuIGNsaWNr
aW5nIG9uIHRoZSB1bmF2YWlsYWJsZSBwbHVnLWluIGJ1dHRvbiBmb3IgYSBibG9ja2VkIHBsdWct
aW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IDUwNzEwYjEzODMwODgxM2YyNDI4MzliYWFhYzU0MzY4YzAzNjdi
MDkuLmI3MzgzYjIyZWIzZjc5ZTllNGMzMjg4YmRiZGZhNTMxYWQ0YzM4MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAogLyogQ29tcG9zaXRpbmcgb24gdGhlIFVJLXByb2Nl
c3MgaW4gV2ViS2l0MiAqLwogI2lmIFBMQVRGT1JNKFFUKQotI2RlZmluZSBXVEZfVVNFX1VJX1NJ
REVfQ09NUE9TSVRJTkcgMQorI2RlZmluZSBXVEZfVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIDEK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IGE5NWViYTExOWRkMzQ1MGUwNDExYjgzNGUzZDljZmNjYjk4MTY4MjguLjQz
N2ZmZDllNTljODI1YWJhYzFlNmQyM2M0NTJkNzVmOTU2NDQyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjEsNyArMjIxLDcgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vz
cy9GaW5kSW5kaWNhdG9yLmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcAogICAg
IFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJBcHBs
aWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LmNwcApAQCAtMjU0LDcgKzI1NCw3IEBAIFNFVChXZWJL
aXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcAogICAg
IFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFs
dWVTdG9yYWdlTWFuYWdlclByb3h5LmNwcAotICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5jcHAKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAogICAgIFVJUHJvY2Vz
cy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0
aW9uRGF0YS5jcHAKQEAgLTQ1NCwxMSArNDU0LDExIEBAIFNFVChXZWJLaXQyX1NPVVJDRVMKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvRW5jb2RlckFkYXB0ZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9y
L1dlYkdyYXBoaWNzTGF5ZXIuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKKyAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCkBAIC00NzcsNyArNDc3LDcgQEAgU0VUKFdlYktpdDJfTUVTU0FHRVNfSU5f
RklMRVMKICAgICBTaGFyZWQvUGx1Z2lucy9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlci5tZXNzYWdl
cy5pbgogCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkubWVzc2FnZXMuaW4KLSAgICBV
SVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorICAgIFVJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2Fn
ZXMuaW4KICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5tZXNz
YWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJCYXR0ZXJ5TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmlu
CiAgICAgVUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4KQEAgLTUzNCw3ICs1MzQsNyBA
QCBTRVQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlz
cGF0Y2hlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29y
ZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbgogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCiApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVk
U291cmNlcy5wcmkKaW5kZXggNDJmYTY2NTdhMmNhNzgyMTMzNTQ3NTdmOWNmZDg4YzE0OGExMDhk
NC4uMjZjYmIyYjg1NmVlOTUxZGFiMmE3OWM1MzBjOTVhZTc2OTEwMDk5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnByaQpAQCAtNTEsOCArNTEsMTAgQEAgVlBBVEggPSBcCiAgICAgV2ViUHJv
Y2Vzcy9SZXNvdXJjZUNhY2hlIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0IFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzIFwKICAgICBXZWJQcm9jZXNzIFwKICAgICBVSVByb2Nlc3MgXAorICAgIFVJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzIFwKICAg
ICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMgXApAQCAt
OTMsMTAgKzk1LDEwIEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYk5vdGlmaWNhdGlv
bk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwKLSAgICBX
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwKLSAgICBXZWJQYWdlL0xheWVyVHJlZUNv
b3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluIFwKLSAgICBXZWJQYWdl
L1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluIFwKKyAgICBEcmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBcCisgICAgTGF5ZXJUcmVlQ29vcmRp
bmF0b3IubWVzc2FnZXMuaW4gXAorICAgIFdlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCisgICAg
V2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIFwKICAg
ICBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCmluZGV4IDliMDQ0OGFlOGE3NmVkYTNmOWZlZmVmYTNkZWNhMjU3Yzg3MTRlM2YuLjk5
NTYzZjRlN2VlMGQzNDZlMGEwMzNiODNkNTM2Y2I2M2FiZmNmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC00Niw3ICs0Niw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oPgpAQCAtNjUyLDcgKzY1Miw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxL
VVJMPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgS1VSTCYgcmVzdWx0KQogICAg
IHJldHVybiB0cnVlOwogfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46
OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxv
YXRQb2ludDNEKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5j
b2RlKGVuY29kZXIsIGZsb2F0UG9pbnQzRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggZGIyYjhmNzQxZWMyYTMxYWNiZGMxMjdjNDE3MWY5
Y2IzN2Q0NTlhYy4uYjc2NzhjNTI1NDljYzI1ZGM5YTMwYzcwZTg4MGE4MTg5ZWJhMzJiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtODYs
NyArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAjZW5kaWYKIAotI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIH0KQEAgLTI0MCw3ICsyNDAsNyBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OktVUkw+IHsKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6S1VSTCYpOwogfTsKIAotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQzRCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXll
clRyZWVJbmZvLmNwcAppbmRleCBmZmRlYTUyMmIzOWQyNmM0ZjdhNTExODkxZTVkZWNiODcwOGQ0
NGNkLi5lMDgzNjQwMDY5ODVkMGJkYTVkMWE2MWU0MzliZDg5MTgxODE4NGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBAIC0xOSw3ICsxOSw3IEBACiAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgi
CiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmgKaW5kZXggZDVkNzIzMzkxMWUwZDJkY2IyZGRlNjEzM2JmNTM2ZDQ1OGE5
MmY2NC4uZGY0NDc3OGE4ZDZiYmFkYjgwODAwZTA5ZGM1MTNjZWEzMTJiMTRjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0yMCw3ICsyMCw3IEBACiAjaWZu
ZGVmIFdlYkxheWVyVHJlZUluZm9faAogI2RlZmluZSBXZWJMYXllclRyZWVJbmZvX2gKIAotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rl
ci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKaW5kZXggZWRlYTljNTkxMTYxNTdlOThhOGQyN2Q2NTkwMzkyZDNhOGU4
N2M2OC4uYjE0YWRkNzQ3MGU3NDdhNDhjODZiYWZjZmUzZmRhMWFhZjQ0NDcyOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCkBAIC0yMTUsNiArMjE1LDkgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0F1dGhl
bnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5oIFwKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0
b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oIFwKKyAgICBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwK
KyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmggXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRl
cmVyLmggXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggXAogICAgIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIFwKICAgICBVSVByb2Nlc3MvRmluZEluZGljYXRvci5o
IFwKQEAgLTIyMyw3ICsyMjYsNiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvR2VvbG9j
YXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVy
LmggXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggXAogICAgIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggXAog
ICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNh
dGlvbi5oIFwKQEAgLTI2OCw3ICsyNzAsNiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3Mv
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94
eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5LmggXAot
ICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oIFwKICAgICBVSVByb2Nlc3MvV2Vi
TG9hZGVyQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5
LmggXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5oIFwKQEAgLTMwNCw3ICszMDUs
NiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0
LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJHZW9sb2NhdGlvblByb3ZpZGVyUXQuaCBcCiAgICAg
VUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuaCBcCi0gICAgVUlQcm9jZXNzL3RleG1h
cC9MYXllckJhY2tpbmdTdG9yZS5oIFwKICAgICBXZWJQcm9jZXNzL0FwcGxpY2F0aW9uQ2FjaGUv
V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9CYXR0ZXJ5L1dl
YkJhdHRlcnlNYW5hZ2VyLmggXApAQCAtMzg1LDggKzM4NSw5IEBAIEhFQURFUlMgKz0gXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9y
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xs
ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKQEAgLTU4NSw2ICs1ODYsOSBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNw
cCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9C
YWNraW5nU3RvcmVRdC5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBcCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIFwKQEAgLTU5
Niw3ICs2MDAsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFk
TGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAg
XAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIFwK
ICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlm
aWNhdGlvbi5jcHAgXApAQCAtNjM5LDcgKzY0Miw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJv
Y2Vzcy9XZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclBy
b3h5LmNwcCBcCi0gICAgVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcCBcCiAgICAg
VUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJNZWRpYUNh
Y2hlTWFuYWdlclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25EYXRhLmNw
cCBcCkBAIC02ODIsNyArNjg0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1dl
YlBvcHVwTWVudVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUHJlZmVyZW5jZXNR
dC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5jcHAgXAot
ICAgIFVJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL0FwcGxpY2F0aW9uQ2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvQmF0dGVyeS9XZWJCYXR0ZXJ5TWFuYWdlci5jcHAgXApAQCAtNzgxLDEy
ICs3ODIsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJB
ZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5j
cHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFw
aGljc0xheWVyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCisgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVB
dGxhcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94
eS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5k
ZXggOTljNWZmYjQwNTI1ODVmNTgzNThlZGVmMDk5YmQ3ZGI4ODA2NDJiMy4uNzkxMWYxNjdjOTc2
ZmFhOGJjNTRhYjc0M2ZiMTAyNTU5MTczYTE4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMiwxMCArMjIsMTAgQEAKICNp
bmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKIAogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlF0
V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJw
YWdlX3BfcC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgpAQCAtODIsNyArODIsNyBA
QCBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9k
ZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiAgICAgICAgIHJldHVybiBvbGROb2RlOwogCiAgICAg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGQt
PndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgp
OwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CisgICAgTGF5ZXJUcmVlUmVuZGVyZXIqIHJl
bmRlcmVyID0gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsK
IAogICAgIFF0V2ViUGFnZVNHTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9k
ZSo+KG9sZE5vZGUpOwogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAppbmRleCAxMjFmOTBkODg5ZjNkMmYy
ODZhZjA4YTBiOTBmMWJkNGZiZmVhYTU3Li4wYWVkNWQ5NDg2ODMwMGZhYWE0ZjUzN2UyOTE0ZTJk
ZTMyNTI4OTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jh
dy9xcmF3d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9y
YXcvcXJhd3dlYnZpZXcuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiQ3Vyc29yLmgi
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJMYXllclRyZWVD
b29yZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNs
dWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VF
dmVudC5oIgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zMSw3ICszMiw2IEBACiAjaW5j
bHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVy
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19wX3AuaCIKQEAgLTM1Myw3ICszNTMsNyBAQCB2b2lk
IFFSYXdXZWJWaWV3OjpwYWludChjb25zdCBRTWF0cml4NHg0JiB0cmFuc2Zvcm0sIGZsb2F0IG9w
YWNpdHksIHVuc2lnbmVkIHBhaQogICAgIGlmICghY29vcmRpbmF0b3JQcm94eSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBj
b29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIFdlYktpdDo6TGF5ZXJU
cmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gY29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGY2ZWJkMmYx
NjU4ZTY5OTY1ZTQ3MWJhMzYyNWE5MjI4OWZhYTcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KG1fdGFyZ2V0UmVjdCk7CisgICAgdGFyZ2V0UmVj
dC5zY2FsZSgxLiAvIG1fc2NhbGUpOworICAgIGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKKyAg
ICBpZiAodGFyZ2V0UmVjdCAhPSByZWN0KCkpIHsKKyAgICAgICAgc2V0UmVjdCh0YXJnZXRSZWN0
KTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOworICAgIH0KKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gdGV4dHVyZSA9IHRoaXMtPnRleHR1cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsK
KyAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAg
ICAgc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVl
OworICAgIH0KKworICAgIGlmIChzaG91bGRSZXNldCkKKyAgICAgICAgdGV4dHVyZS0+cmVzZXQo
bV90YXJnZXRSZWN0LnNpemUoKSwgbV9zdXJmYWNlLT5mbGFncygpICYgU2hhcmVhYmxlQml0bWFw
OjpTdXBwb3J0c0FscGhhID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IDApOworCisg
ICAgbV9zdXJmYWNlLT5jb3B5VG9UZXh0dXJlKHRleHR1cmUsIG1fc291cmNlUmVjdCwgbV9zdXJm
YWNlT2Zmc2V0KTsKKyAgICBtX3N1cmZhY2UuY2xlYXIoKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNl
PiBidWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKKyAgICBtX3RhcmdldFJlY3QgPSB0YXJnZXRSZWN0OworICAgIG1fc3VyZmFj
ZU9mZnNldCA9IG9mZnNldDsKKyAgICBtX3N1cmZhY2UgPSBidWZmZXI7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUoaW50IGlkLCBmbG9hdCBzY2FsZSkKK3sK
KyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKHNjYWxlKSk7
CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
OjpyZW1vdmVUaWxlKGludCBpZCkKK3sKKyAgICBtX3RpbGVzVG9SZW1vdmUuYXBwZW5kKGlkKTsK
K30KKworCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKGludCBpZCwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFz
c1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpp
dGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fdGlsZXMu
ZW5kKCkpOworICAgIGl0LT5zZWNvbmQuaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgaXQt
PnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIs
IG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwor
ICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vjb25kLnRleHR1cmUoKTsK
KyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9
CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOworfQorCitzdGF0aWMg
Ym9vbCBzaG91bGRTaG93VGlsZURlYnVnVmlzdWFscygpCit7CisjaWYgUExBVEZPUk0oUVQpCisg
ICAgcmV0dXJuIChxZ2V0ZW52KCJRVF9XRUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNV
QUxTIikgPT0gIjEiKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBt
YXNrKQoreworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRpbGVzVG9QYWludDsKKwor
ICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50LCBpbiBjYXNlIHRo
ZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgorICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIEZsb2F0UmVj
dCBjb3ZlcmVkUmVjdDsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAodGlsZS5zY2FsZSgpID09IG1fc2NhbGUpIHsKKyAgICAgICAgICAgIHRp
bGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOworICAgICAgICAgICAgY292ZXJlZFJlY3QudW5pdGUo
dGlsZS5yZWN0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBPbmx5IHNob3cgdGhlIHByZXZpb3VzIHRpbGUgaWYgdGhlIG9wYWNpdHkgaXMgaGlnaCwg
b3RoZXJ3aXNlIGVmZmVjdCBsb29rcyBsaWtlIGEgYnVnLgorICAgICAgICAvLyBXZSBzaG93IHRo
ZSBwcmV2aW91cy1zY2FsZSB0aWxlIGFueXdheSBpZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRo
IGFueSBjdXJyZW50LXNjYWxlIHRpbGUuCisgICAgICAgIGlmIChvcGFjaXR5IDwgMC45NSAmJiBj
b3ZlcmVkUmVjdC5pbnRlcnNlY3RzKHRpbGUucmVjdCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIHRpbGVzVG9QYWludC5wcmVwZW5kKCZ0aWxlKTsKKyAgICB9CisKKyAgICAv
LyBUT0RPOiBXaGVuIHRoZSBUZXh0dXJlTWFwcGVyIG1ha2VzIGEgZGlzdGluY3Rpb24gYmV0d2Vl
biBzb21lIGVkZ2VzIGV4cG9zZWQgYW5kIG5vIGVkZ2VzCisgICAgLy8gZXhwb3NlZCwgdGhlIHZh
bHVlIHBhc3NlZCBzaG91bGQgYmUgYW4gYWNjdXJhdGUgcmVmbGVjdGlvbiBvZiB0aGUgdGlsZSBz
dWJzZXQgdGhhdCB3ZSBhcmUKKyAgICAvLyBwYXNzaW5nLiBGb3Igbm93IHdlIGp1c3QgImVzdGlt
YXRlIiBzaW5jZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSBkb2Vzbid0IGtlZXAgaW5mb3JtYXRp
b24gYWJvdXQKKyAgICAvLyB0aGUgdG90YWwgdGlsZWQgc3VyZmFjZSByZWN0IGF0IHRoZSBtb21l
bnQuCisgICAgdW5zaWduZWQgZWRnZXNFeHBvc2VkID0gbV90aWxlcy5zaXplKCkgPiAxID8gVGV4
dHVyZU1hcHBlcjo6Tm9FZGdlcyA6IFRleHR1cmVNYXBwZXI6OkFsbEVkZ2VzOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1BhaW50LnNpemUoKTsgKytpKSB7CisgICAgICAgIFRl
eHR1cmVNYXBwZXJUaWxlKiB0aWxlID0gdGlsZXNUb1BhaW50W2ldOworICAgICAgICB0aWxlLT5w
YWludCh0ZXh0dXJlTWFwcGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIGVkZ2VzRXhwb3Nl
ZCk7CisgICAgICAgIHN0YXRpYyBib29sIHNob3VsZERlYnVnID0gc2hvdWxkU2hvd1RpbGVEZWJ1
Z1Zpc3VhbHMoKTsKKyAgICAgICAgaWYgKCFzaG91bGREZWJ1ZykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdCb3JkZXIoQ29sb3IoMHhGRiwgMCwg
MCksIDIsIHRpbGUtPnJlY3QoKSwgdHJhbnNmb3JtKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+
ZHJhd1JlcGFpbnRDb3VudGVyKHN0YXRpY19jYXN0PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZSo+KHRpbGUpLT5yZXBhaW50Q291bnQoKSwgOCwgdGlsZXNUb1BhaW50W2ldLT5yZWN0KCkubG9j
YXRpb24oKSwgdHJhbnNmb3JtKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIp
Cit7CisgICAgVmVjdG9yPGludD46Oml0ZXJhdG9yIHRpbGVzVG9SZW1vdmVFbmQgPSBtX3RpbGVz
VG9SZW1vdmUuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gdGlsZXNUb1JlbW92ZUVuZDsgKytpdCkKKyAgICAg
ICAgbV90aWxlcy5yZW1vdmUoKml0KTsKKyAgICBtX3RpbGVzVG9SZW1vdmUuY2xlYXIoKTsKKwor
ICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciB0
aWxlc0VuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9
IHRpbGVzRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLnN3YXBCdWZmZXJzKHRleHR1cmVN
YXBwZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM3ZmViYTcwYWM4YmVl
Y2IyZDAzNjQ5NWZiZGZjNGYzNGZmYjQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAorI2RlZmluZSBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBTaGFyZWFibGVTdXJmYWNlOworCitjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUgeworcHVibGljOgorICAgIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShmbG9hdCBzY2FsZSA9IDEpCisgICAgICAgIDogVGV4
dHVyZU1hcHBlclRpbGUoV2ViQ29yZTo6RmxvYXRSZWN0KCkpCisgICAgICAgICwgbV9zY2FsZShz
Y2FsZSkKKyAgICAgICAgLCBtX3JlcGFpbnRDb3VudCgwKQorICAgIHsKKyAgICB9CisKKyAgICBp
bmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9CisgICAgaW5saW5l
IHZvaWQgaW5jcmVtZW50UmVwYWludENvdW50KCkgeyArK21fcmVwYWludENvdW50OyB9CisgICAg
aW5saW5lIGludCByZXBhaW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRDb3VudDsg
fQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOworICAgIHZv
aWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNl
PiBtX3N1cmZhY2U7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3RhcmdldFJlY3Q7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zdXJm
YWNlT2Zmc2V0OworICAgIGZsb2F0IG1fc2NhbGU7CisgICAgaW50IG1fcmVwYWludENvdW50Owor
fTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgdm9pZCBjcmVhdGVUaWxlKGlu
dCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGlsZShpbnQpOworICAgIHZvaWQgdXBkYXRlVGls
ZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
UGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQorICAgIHZv
aWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSopOworCitwcml2YXRlOgorICAg
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKCkKKyAgICAgICAgOiBtX3NjYWxlKDEuKQorICAgIHsg
fQorICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+IG1fdGlsZXM7
CisgICAgVmVjdG9yPGludD4gbV90aWxlc1RvUmVtb3ZlOworICAgIGZsb2F0IG1fc2NhbGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjBhNWEzOTU1ZWIxNWZiZWQ2MGQzOWY2Nzk5NGY5Y2Mw
NGYyZjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKQEAgLTAsMCArMSwx
NzggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCisjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5m
by5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJh
d2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1fZHJhd2luZ0FyZWFQcm94
eShkcmF3aW5nQXJlYVByb3h5KQorICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJU
cmVlUmVuZGVyZXIodGhpcykpKQorICAgICwgbV9sYXN0U2VudFNjYWxlKDApCit7Cit9CisKK0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5KCkKK3sK
KyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRh
dGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpc3Bh
dGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIG1fcmVu
ZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0
ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8pCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7Cisj
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaW50IHRva2VuID0gdXBkYXRlSW5mby5zdXJm
YWNlSGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgaWYgKHRva2VuKSB7CisgICAg
ICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRv
ciBpdCA9IG1fc3VyZmFjZXMuZmluZCh0b2tlbik7CisgICAgICAgIGlmIChpdCA9PSBtX3N1cmZh
Y2VzLmVuZCgpKSB7CisgICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3Jl
YXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CisgICAgICAgICAgICBtX3N1cmZhY2VzLmFk
ZCh0b2tlbiwgc3VyZmFjZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3VyZmFjZSA9
IGl0LT5zZWNvbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJm
YWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyNlbHNlCisgICAgc3VyZmFj
ZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwor
I2VuZGlmCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0
ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVy
ZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBzdXJmYWNl
LCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQor
eworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxl
LCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQp
Cit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxh
eWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
V2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7CisgICAgdXBkYXRl
Vmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21w
b3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZv
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXll
clN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklE
IGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRl
cmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJz
LCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5k
ZXJlci5nZXQoKSkpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
aW50NjRfdCBrZXkpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
Y29udGVudHNTaXplKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwor
fQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYg
dHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICAvLyBJbmZvcm0gdGhlIHJlbmRlcmVyIHRvIGFkanVz
dCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJl
Y3QpKTsKKworICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRv
IG1ha2Ugc3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRo
aXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCisgICAgSW50UmVjdCByb3VuZGVk
UmVjdCA9IHJvdW5kZWRJbnRSZWN0KHJlY3QpOworICAgIGlmIChyb3VuZGVkUmVjdCA9PSBtX2xh
c3RTZW50VmlzaWJsZVJlY3QgJiYgc2NhbGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3Rv
cnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJvdW5kZWRS
ZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wYWdlSUQoKSk7CisgICAgbV9sYXN0U2VudFZpc2libGVSZWN0ID0gcm91bmRlZFJlY3Q7Cisg
ICAgbV9sYXN0U2VudFNjYWxlID0gc2NhbGU7CisgICAgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0
b3IgPSB0cmFqZWN0b3J5VmVjdG9yOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlJlbmRlck5l
eHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCks
IHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0Nh
bnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBn
cmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdl
QmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwor
fQorCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ZjE1ZDFkMzEw
ZWQzNjQ5ZmE3ODkwYTZlMWU4ZTM1ZTMyYTMzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRv
clByb3h5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBM
YXllclRyZWVDb29yZGluYXRvclByb3h5X2gKKyNkZWZpbmUgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJCYWNr
aW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiUmVn
aW9uLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJMYXll
clRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3Qu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxv
b3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2Ns
YXNzIFFTR05vZGU7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJMYXllckluZm87CitjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKK2NsYXNzIFdlYkxh
eWVyVXBkYXRlSW5mbzsKKworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CitwdWJs
aWM6CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7Cisg
ICAgdmlydHVhbCB+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOworICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOworICAg
IHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3Rv
cjxXZWJMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldENv
bXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9w
ZXJhdGlvbnMmKTsKKyNlbmRpZgorICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJM
YXllcklEKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBwdXJnZUdM
UmVzb3VyY2VzKCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFq
ZWN0b3J5VmVjdG9yKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CisgICAgdm9pZCBjcmVh
dGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZv
ckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJik7
CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
Kik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4pOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgTGF5ZXJUcmVlUmVuZGVy
ZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2
b2lkKCk+Jik7CisKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7Cisg
ICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOworICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV9sYXN0U2VudFZpc2libGVSZWN0OworICAgIGZsb2F0IG1fbGFzdFNlbnRTY2FsZTsK
KyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yOworI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFy
ZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCisK
KyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvclByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjllY2EwMzJmZjQxNjFlMTFkMDI5ZTU4NDhhMjM4N2IzNzk2OGZhMTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzggQEAKKyMKKyMg
ICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CittZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKKyAgICBTZXRDb21wb3Np
dGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6V2ViTGF5ZXJJbmZvIGxheWVySW5m
bykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1
aW50MzJfdD4gY2hpbGRyZW4pCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIFNldENvbXBv
c2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
IGZpbHRlcnMpCisjZW5kaWYKKyAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBp
ZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIENyZWF0ZVRp
bGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0
IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBV
cGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6
SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8p
CisgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCisg
ICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgpCisgICAgRGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCisgICAgU3luY0NhbnZh
cyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCB1aW50MzJfdCBncmFw
aGljc1N1cmZhY2VUb2tlbikKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ3MDRlNWUzMWQ5NGNkNTk1MjIxNTMwNWM2YTMxYzMzYmZiMGU2
NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTAsMCArMSw0OTkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCisKKyNpbmNsdWRl
ICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckxheWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPE9wZW5HTFNoaW1z
Lmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3Rl
bXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgY2FsbChQYXNzUmVmUHRyPFQ+IG9iamVjdFRvR3VhcmQsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTWFpblRocmVhZEd1
YXJkZWRJbnZva2VyPFQ+KiBpbnZva2VyID0gbmV3IE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxU
PihvYmplY3RUb0d1YXJkLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoaW52
b2tlLCBpbnZva2VyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZEd1YXJkZWRJ
bnZva2VyKFBhc3NSZWZQdHI8VD4gb2JqZWN0LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBuZXdG
dW5jdGlvbikKKyAgICAgICAgOiBvYmplY3RUb0d1YXJkKG9iamVjdCkKKyAgICAgICAgLCBmdW5j
dGlvbihuZXdGdW5jdGlvbikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPFQ+IG9iamVjdFRv
R3VhcmQ7CisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbjsKKyAgICBzdGF0aWMgdm9pZCBp
bnZva2Uodm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tl
cjxUPiogaW52b2tlciA9IHN0YXRpY19jYXN0PE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPio+
KGRhdGEpOworICAgICAgICBpbnZva2VyLT5mdW5jdGlvbigpOworICAgICAgICBkZWxldGUgaW52
b2tlcjsKKyAgICB9Cit9OworCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJl
YWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKGlzTWFpblRo
cmVhZCgpKQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UKKyAgICAgICAgTWFpblRocmVh
ZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZVJlbmRlcmVyPjo6Y2FsbCh0aGlzLCBmdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBGbG9hdFBvaW50IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9h
dFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJl
Y3QsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUpCit7CisgICAgZmxvYXQgc2Nyb2xsUG9z
aXRpb25YID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueCgpLCAwLjBmKTsKKyAgICBzY3JvbGxQ
b3NpdGlvblggPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblgsIGNvbnRlbnRTaXplLndpZHRoKCkg
LSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7CisKKyAgICBmbG9hdCBzY3JvbGxQb3NpdGlv
blkgPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi55KCksIDAuMGYpOworICAgIHNjcm9sbFBvc2l0
aW9uWSA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2
aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBGbG9hdFBvaW50KHNjcm9s
bFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsKK30KKworTGF5ZXJUcmVlUmVuZGVyZXI6Okxh
eWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkpCisgICAgOiBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQp
CisgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQoreworfQorCitMYXllclRyZWVSZW5kZXJlcjo6fkxh
eWVyVHJlZVJlbmRlcmVyKCkKK3sKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdy
YXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRo
aXMpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXll
cihuZXdMYXllcik7CisgICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21M
YXllcihmYWxzZSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKwordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQoreworICAgIGlmICgh
bV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgQVNTRVJUKG1fdGV4dHVy
ZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUp
OworCisgICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOworICAgIEdyYXBoaWNzTGF5
ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290
TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExheWVyKTsKKworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4
dHVyZU1hcHBlci5nZXQoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKFBh
aW50RmxhZ3MpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIGNsaXBSZWN0KTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5
KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgp
IHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICAg
ICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1cnJl
bnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAg
IH0KKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKK30KKwordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0IHBhaW50ZXIpCit7CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpOworICAgIEFT
U0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVy
OjpTb2Z0d2FyZU1vZGUpOworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKKwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGlj
c0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBh
aW50aW5nKCk7CisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOwor
fQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250ZW50c1NpemUgPSBjb250
ZW50c1NpemU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dCA9IHJlY3Q7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KCkK
K3sKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQoreworICAgIGlmICht
X2ZpeGVkTGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRml4ZWQg
bGF5ZXIgcG9zaXRpb25zIGFyZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVw
ZGF0ZSB0aGUgdmlzaWJsZSBjb250ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgorICAgIC8v
IElmIHdlIHdhbnQgdGhvc2UgbGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9y
dCB3aGVuIHdlIG1vdmUgYmV0d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0
byBvZmZzZXQKKyAgICAvLyB0aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBv
c2l0aW9uIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0
IGxheW91dC4KKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBv
c2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50
c1JlY3QsIG1fY29udGVudHNTaXplKTsKKyAgICBGbG9hdFBvaW50IHJlbmRlcmVkU2Nyb2xsUG9z
aXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb24sIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworICAgIEZsb2F0
U2l6ZSBkZWx0YSA9IHNjcm9sbFBvc2l0aW9uIC0gcmVuZGVyZWRTY3JvbGxQb3NpdGlvbjsKKwor
ICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOworICAgIGZv
ciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5zZXRT
Y3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOworfQorCit2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
Cit7CisgICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRp
b247Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pCit7CisgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpIHx8ICFtX3RleHR1
cmVNYXBwZXIpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJ
RChpZCk7CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNh
bnZhc0JhY2tpbmdTdG9yZTsKKyAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBp
dCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChpZCk7CisgICAgaWYgKGl0ID09IG1fc3Vy
ZmFjZUJhY2tpbmdTdG9yZXMuZW5kKCkpIHsKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0g
VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAgICBtX3N1
cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29uZDsKKworICAgIGNhbnZh
c0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNzU3VyZmFjZVRva2VuLCBj
YW52YXNTaXplKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdT
dG9yZS5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5
ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxk
SURzKQoreworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQg
PSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNv
bmQ7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViTGF5ZXJJ
RCBjaGlsZElEID0gY2hpbGRJRHNbaV07CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0g
bGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgICAgICBj
aGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKKyAgICAgICAgICAgIG1fbGF5
ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKK30K
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQoreworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBt
X2xheWVycy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOworCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIGxheWVyLT5zZXRGaWx0
ZXJzKGZpbHRlcnMpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCit7
CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5
ZXJzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7CisKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisKKyAgICBsYXllci0+c2V0UmVwbGlj
YXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7CisgICAgbGF5ZXItPnNl
dE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKKworICAgIGxheWVyLT5zZXRQ
b3NpdGlvbihsYXllckluZm8ucG9zKTsKKyAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6
ZSk7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICBs
YXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKKyAgICBsYXllci0+
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICBs
YXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOwor
ICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwor
ICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAg
bGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsKKyAgICBsYXll
ci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zpc2libGUpOworICAgIHRv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5
ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3
cG9ydCkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVyKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKKworICAgIGFzc2lnbkltYWdlVG9MYXll
cihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworCisgICAgLy8gTmV2ZXIg
bWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxh
eWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwor
ICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBsYXllci0+c2V0
UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICBpZiAobGF5ZXJJbmZvLmlz
Um9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisgICAgICAgIHNldFJvb3RMYXllcklE
KGlkKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJ
RCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIG1fZml4
ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVySUQpOworI2VuZGlmCisgICAgZGVs
ZXRlIGxheWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZUxheWVyKFdl
YkxheWVySUQgaWQpCit7CisgICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRoZSBuZXcgbGF5ZXIncyBw
b2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAorICAgIC8vIGJlY2F1c2UgT3duUHRyIGlz
IG5vdCBjb3B5YWJsZS4KKyAgICBpZiAobV9sYXllcnMuZmluZChpZCkgPT0gbV9sYXllcnMuZW5k
KCkpCisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIoaWQpLmxlYWtQdHIoKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQg
bGF5ZXJJRCkKK3sKKyAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIG1fcm9vdExheWVy
LT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgaWYgKCFsYXllcklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAg
ICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hp
bGQobGF5ZXIpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBMYXll
clRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCit7CisgICAgVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChp
ZCkpOworICAgIEFTU0VSVChsYXllcik7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdTdG9yZSo+
KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
OworICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7Cisg
ICAgfQorICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIHJldHVybiBiYWNraW5nU3RvcmU7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXll
cklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5
ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAg
IGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOworfQorCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIFJlZlB0cjxDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwor
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1
cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOworICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3sKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGlt
YWdlSUQsIGJhY2tpbmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyht
X3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit7
CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBpZiAoIWltYWdlSUQpIHsKKyAgICAgICAg
bGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46
Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsK
KyAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOworICAg
IGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKK3sKKyAgICBIYXNoU2V0
PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQ
dHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAg
KCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAg
ICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQoreworICAgIG1fcmVuZGVyZWRD
b250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBv
c2l0aW9uOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVj
dCgpKTsKKyAgICBjb21taXRUaWxlT3BlcmF0aW9ucygpOworCisgICAgLy8gVGhlIHBlbmRpbmcg
dGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHBy
b2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKK30KKwordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBpZiAobV9sYXllclRy
ZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkt
PnJlbmRlck5leHRGcmFtZSgpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVS
b290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV90ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1
cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5h
YmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKHRydWUpOworICAgIH0KKworICAgIG1fcm9vdExh
eWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOworICAgIG1fcm9vdExheWVyLT5z
ZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50
KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAs
IDAsIDApKTsKKworICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNp
emUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNldFNp
emUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290
TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNSZW1vdGVDb250ZW50KCkKK3sKKyAgICAv
LyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0
aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNvbnRleHQuCisgICAgZW5zdXJlUm9vdExheWVyKCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kp
CisgICAgICAgIG1fcmVuZGVyUXVldWVbaV0oKTsKKworICAgIG1fcmVuZGVyUXVldWUuY2xlYXIo
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCit7Cisg
ICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RM
YXllcigpKTsKKworICAgIGlmIChsYXllcikKKyAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0
b3Jlc1JlY3Vyc2l2ZSgpOworCisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIo
KTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVz
LmNsZWFyKCk7CisjZW5kaWYKKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgIG1fcm9vdExheWVyLmNsZWFyKCk7CisgICAgbV9yb290TGF5ZXJJRCA9IEludmFsaWRX
ZWJMYXllcklEOworICAgIG1fbGF5ZXJzLmNsZWFyKCk7CisgICAgbV9maXhlZExheWVycy5jbGVh
cigpOworICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlc1dp
dGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworCisgICAgc2V0QWN0aXZlKGZhbHNlKTsKKworICAg
IGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0
b3JlcywgdGhpcykpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQoreworICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgICAg
IG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCit7CisgICAgbV9sYXllclRyZWVDb29y
ZGluYXRvclByb3h5ID0gMDsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXBwZW5kVXBk
YXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGlmICghbV9pc0Fj
dGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rp
b24pOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUp
Cit7CisgICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgorICAgIC8vIElm
IHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhlbiB0
aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUKKyAg
ICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2Uu
CisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOworICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Cisg
ICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIHJlbmRlck5leHRGcmFtZSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyM2JlMzhjNTljMjIw
ZTU1ZWFiMDgxNzk4ZmI1ODAwMzdiOTEzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCkBA
IC0wLDAgKzEsMTU0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIExheWVyVHJlZVJl
bmRlcmVyX2gKKyNkZWZpbmUgTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzU3VyZmFjZS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNpbmNs
dWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTsKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKwor
Y2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5
ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Citw
dWJsaWM6CisgICAgc3RydWN0IFRpbGVVcGRhdGUgeworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0
IHNvdXJjZVJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdDsKKyAgICAg
ICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7CisgICAgICAgIFdlYkNvcmU6Oklu
dFBvaW50IG9mZnNldDsKKyAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVTdXJmYWNlPiBuZXdTdXJmYWNlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbmV3T2Zm
c2V0KQorICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKKyAgICAgICAgICAgICwgdGFy
Z2V0UmVjdCh0YXJnZXQpCisgICAgICAgICAgICAsIHN1cmZhY2UobmV3U3VyZmFjZSkKKyAgICAg
ICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsK
KyAgICBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5Kik7CisgICAg
dmlydHVhbCB+TGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMo
KTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKKyAgICB2b2lkIHBhaW50VG9HcmFw
aGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CisgICAg
dm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7CisgICAgdm9pZCBzeW5jQ2Fu
dmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50
MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7CisKKyAgICB2b2lkIGRldGFjaCgpOworICAgIHZv
aWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVwZGF0
ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKKyAgICB2b2lkIGRlbGV0
ZUxheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCk7
CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJM
YXllcklEPiYpOworICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJM
YXllckluZm8mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXllckZp
bHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2Vu
ZGlmCisKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7
CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7CisgICAgdm9pZCB1cGRhdGVU
aWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOworICAgIHZvaWQgZmx1c2hM
YXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPik7CisgICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7CisKK3By
aXZhdGU6CisgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXll
cihXZWJMYXllcklEKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChX
ZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVySUQpID8gMCA6IG1f
bGF5ZXJzLmdldChpZCk7IH0KKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIo
KSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgLy8gUmVpbXBsZW1lbnRhdGlv
bnMgZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3Vi
bGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIHsgfQorICAgIHZvaWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mKTsKKyAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJN
YXA7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOworICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisKKyAgICAvLyBSZW5kZXIgcXVldWUg
Y2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBj
YWxsIHN0YWNrIQorICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsK
KworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1h
cHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKKyAgICBIYXNoTWFwPGludDY0X3Qs
IFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VzOworICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKKyNlbmRpZgorI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBSZWZQ
dHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJh
Y2tpbmdTdG9yZU1hcDsKKyAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXM7CisjZW5kaWYKKworICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Cisg
ICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBhc3NpZ25JbWFnZVRvTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJRCk7CisgICAgdm9pZCBl
bnN1cmVSb290TGF5ZXIoKTsKKyAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOworICAg
IHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7
CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3Jl
cygpOworCisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5OworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXll
cjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKKworICAgIExheWVy
TWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7CisgICAgV2ViTGF5ZXJJ
RCBtX3Jvb3RMYXllcklEOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fcmVuZGVyZWRDb250ZW50
c1Njcm9sbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fcGVuZGluZ1JlbmRlcmVk
Q29udGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1faXNBY3RpdmU7Cit9OworCit9Owor
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gTGF5ZXJU
cmVlUmVuZGVyZXJfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmNwcAppbmRleCA1ZjdiMTA2NTQ3MTQ3Nzc2Njc3NDIyZTdhYjZmY2UxMGI0ZDc1MjU2
Li43OWU2MTBlOTYxZGNkZmVjNWU4ODk3NGZmMTk2NDM3YWQ4YzU1NTM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJMYXllclRyZWVD
b29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4KICNlbmRp
ZgpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQogICAgIHNpemVEaWRD
aGFuZ2UoKTsKIH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6dXBkYXRlVmlld3BvcnQo
KQogewogICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNwbGF5KHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aAppbmRleCA5OTQ2MGU0OTlhMDNjOTNhYmI1OGJjM2YzZGVmYjBlOTNjM2UxZGQ0Li41YzJkNTA4
YzQ2MGIxOGY4ZDgyMmEyYWI2MmNjMGVhYjEzNzA0ZWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGNvbG9yU3BhY2VEaWRDaGFuZ2UoKSB7IH0KIAotI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
dmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzUmVjdCgpOyB9CiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgpIGNvbnN0OwpAQCAtMTEz
LDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCi0jaWYgVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIE93blB0cjxMYXll
clRyZWVDb29yZGluYXRvclByb3h5PiBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1w
bC5jcHAKaW5kZXggY2Q4YzVmNjI5ZmE3M2UxOTVmMDNjMzk2NzNkNDUxMTY1M2RlMDI2My4uY2Q5
Y2FmYzE3NjRjNDc1ZGE3YmRhZGQ3N2JkMDJmZDA2M2ViYTk5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNiw3ICszNiw3
IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdp
b24uaD4KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKICNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjZW5k
aWYKIApAQCAtNTgsNyArNTgsNyBAQCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6RHJhd2luZ0FyZWFQ
cm94eUltcGwoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAgICAgLCBtX2lzQmFja2luZ1N0
b3JlRGlzY2FyZGFibGUodHJ1ZSkKICAgICAsIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyKFJ1
bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkRyYXdpbmdBcmVhUHJveHlJbXBsOjpkaXNjYXJkQmFj
a2luZ1N0b3JlKQogewotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFs
bG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVu
dGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVDb29yZGluYXRvclByb3h5KHRoaXMp
KTsKQEAgLTM1MywxMyArMzUzLDEzIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4CiAgICAgbV9i
YWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29udGV4dCA9IGxheWVyVHJl
ZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIGlmICghbV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5KQogICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSBhZG9wdFB0
cihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0aGlzKSk7CiAjZW5kaWYKIH0KIAotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
clByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
IHsKICAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRleCAxOWE3NzFmMmNiNTc2
MWM3YzRmYzEwYjc3MTBkYmY3ZTIwNTc3NDRmLi4wYzlmMDRmOGUwMmRhOGYwY2RiYzBhMzAxMGY1
ZjA0MWZhMzM5OTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0lu
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVybiAhbV9sYXllclRyZWVD
b250ZXh0LmlzRW1wdHkoKTsgfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwg
ZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnkpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFl
ZTMyNDA0MjQxYjQwMWVlZDllNWZlMjU1OTk4Mzc2Yzk1MmMzZjguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShV
SV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
aCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5j
bHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVy
LmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3
aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQotICAgIDogbV9kcmF3aW5nQXJlYVByb3h5
KGRyYXdpbmdBcmVhUHJveHkpCi0gICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVmKG5ldyBXZWJMYXll
clRyZWVSZW5kZXJlcih0aGlzKSkpCi0gICAgLCBtX2xhc3RTZW50U2NhbGUoMCkKLXsKLX0KLQot
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6fkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKQot
ewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVw
ZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlz
cGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgbV9y
ZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
dXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklE
LCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3VyZmFj
ZTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpbnQgdG9rZW4gPSB1cGRhdGVJbmZv
LnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAgICBpZiAodG9rZW4pIHsK
LSAgICAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+ID46Oml0
ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuKTsKLSAgICAgICAgaWYgKGl0ID09IG1f
c3VyZmFjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNl
OjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSAgICAgICAgICAgIG1fc3VyZmFj
ZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzdXJm
YWNlID0gaXQtPnNlY29uZDsKLSAgICB9IGVsc2UKLSAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJs
ZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwotI2Vsc2UKLSAgICBz
dXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRs
ZSk7Ci0jZW5kaWYKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRhcmdldFJl
Y3QsIHN1cmZhY2UsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGlu
dCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIo
V2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci0gICAgdXBkYXRl
Vmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQo
KSwgaWQpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25z
dCBXZWJMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBpbmZv
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdM
YXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hp
bGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwotfQot
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0
ZXJzKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRS
ZW5kZXJGcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpKSk7Ci0gICAgdXBkYXRl
Vmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3JlbmRlcmVy
LmdldCgpLCBrZXksIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBt
X3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRz
U2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9y
KQotewotICAgIC8vIEluZm9ybSB0aGUgcmVuZGVyZXIgdG8gYWRqdXN0IHZpZXdwb3J0LWZpeGVk
IGxheWVycy4KLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5nZXQoKSwgcmVjdCkpOwotCi0gICAg
Ly8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNsb3NpbmcgaXQgdG8gbWFrZSBzdXJlIHRo
YXQgaXRzIHNpemUgc3RheXMgdGhlIHNhbWUgd2hpbGUgcGFubmluZy4gVGhpcyBjYW4gaGF2ZSBu
YXN0eSBlZmZlY3RzIG9uIGxheW91dC4KLSAgICBJbnRSZWN0IHJvdW5kZWRSZWN0ID0gcm91bmRl
ZEludFJlY3QocmVjdCk7Ci0gICAgaWYgKHJvdW5kZWRSZWN0ID09IG1fbGFzdFNlbnRWaXNpYmxl
UmVjdCAmJiBzY2FsZSA9PSBtX2xhc3RTZW50U2NhbGUgJiYgdHJhamVjdG9yeVZlY3RvciA9PSBt
X2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OlNldFZpc2libGVDb250ZW50c1JlY3Qocm91bmRlZFJlY3QsIHNjYWxlLCB0
cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
LSAgICBtX2xhc3RTZW50VmlzaWJsZVJlY3QgPSByb3VuZGVkUmVjdDsKLSAgICBtX2xhc3RTZW50
U2NhbGUgPSBzY2FsZTsKLSAgICBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3Rv
cnlWZWN0b3I7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVuZGVyTmV4
dEZyYW1lKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6UmVuZGVyTmV4dEZyYW1lKCksIG1f
ZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24p
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzeW5jQ2FudmFzKHVpbnQz
Ml90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZh
Y2VUb2tlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNz
U3VyZmFjZVRva2VuKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cHVy
Z2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6UHVyZ2VCYWNraW5n
U3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLX0K
LSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmZWQzM2E4MTA1NjljODFhOTlmOGIyZmFhZTA0NzQ0Y2MxMmNmN2Vk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHlfaAotI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvclByb3h5X2gK
LQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3Jl
LmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgot
I2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5m
by5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRU0dO
b2RlOwotUVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
TGF5ZXJJbmZvOwotY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXI7Ci1jbGFzcyBXZWJMYXllclVw
ZGF0ZUluZm87Ci0KLWNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgewotcHVibGljOgot
ICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwotICAgIHZp
cnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0
aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lk
IHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2Vi
TGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRDb21wb3Np
dGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJik7Ci0jZW5kaWYKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJ
RCk7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKLSAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwotICAgIHZvaWQgcHVyZ2VHTFJlc291
cmNlcygpOwotICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9y
eVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOwotICAgIHZvaWQgY3JlYXRlVGls
ZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXll
cihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxh
eWVySUQsIGludCB0aWxlSUQpOwotICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2UoaW50NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOwotICAg
IHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOwotICAgIHZvaWQg
ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwot
ICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwot
ICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IHBvc2l0aW9uKTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsK
LSAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVy
KiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0K
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5OwotICAg
IFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKLSAgICBmbG9hdCBtX2xhc3RTZW50U2NhbGU7
Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1l
c3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjg0YjkxNWJkODZmNTY1
YzFjYjZmYWMwMjBhOTM2OGI5MTliZGJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIwot
IyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdlcyAtPiBMYXllclRyZWVD
b29yZGluYXRvclByb3h5IHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3Qg
aWQsIFdlYktpdDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKLSAgICBTZXRDb21wb3NpdGluZ0xh
eWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCi0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQz
Ml90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCi0jZW5kaWYKLSAgICBT
ZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBEZWxldGVDb21wb3NpdGlu
Z0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMy
X3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJL
aXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVtb3ZlVGlsZUZvckxheWVy
KHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCi0gICAgQ3JlYXRlRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFu
ZGxlKQotICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKLSAg
ICBEaWRSZW5kZXJGcmFtZSgpCi0gICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6
SW50UG9pbnQgcG9zaXRpb24pCi0gICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6
SW50U2l6ZSBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLX0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJl
bmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMmUwOTZhZWI4ZGNhN2E5MGEw
ODNmYjQ2MDk2YjM1NmFiNzc5NTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLQot
I2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5o
IgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCi0jaW5jbHVk
ZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IGNs
YXNzIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
Y2FsbChQYXNzUmVmUHRyPFQ+IG9iamVjdFRvR3VhcmQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+KiBp
bnZva2VyID0gbmV3IE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPihvYmplY3RUb0d1YXJkLCBm
dW5jdGlvbik7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoaW52b2tlLCBpbnZva2VyKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyKFBhc3NSZWZQdHI8
VD4gb2JqZWN0LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBuZXdGdW5jdGlvbikKLSAgICAgICAg
OiBvYmplY3RUb0d1YXJkKG9iamVjdCkKLSAgICAgICAgLCBmdW5jdGlvbihuZXdGdW5jdGlvbikK
LSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFQ+IG9iamVjdFRvR3VhcmQ7Ci0gICAgRnVuY3Rp
b248dm9pZCgpPiBmdW5jdGlvbjsKLSAgICBzdGF0aWMgdm9pZCBpbnZva2Uodm9pZCogZGF0YSkK
LSAgICB7Ci0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IHN0
YXRpY19jYXN0PE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPio+KGRhdGEpOwotICAgICAgICBp
bnZva2VyLT5mdW5jdGlvbigpOwotICAgICAgICBkZWxldGUgaW52b2tlcjsKLSAgICB9Ci19Owot
Ci12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKQotICAgICAg
ICBmdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2Vy
PFdlYkxheWVyVHJlZVJlbmRlcmVyPjo6Y2FsbCh0aGlzLCBmdW5jdGlvbik7Ci19Ci0KLXN0YXRp
YyBGbG9hdFBvaW50IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3Jv
bGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEZs
b2F0U2l6ZSYgY29udGVudFNpemUpCi17Ci0gICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25YID0gc3Rk
OjptYXgoc2Nyb2xsUG9zaXRpb24ueCgpLCAwLjBmKTsKLSAgICBzY3JvbGxQb3NpdGlvblggPSBz
dGQ6Om1pbihzY3JvbGxQb3NpdGlvblgsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aXNpYmxlQ29u
dGVudFJlY3Qud2lkdGgoKSk7Ci0KLSAgICBmbG9hdCBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1h
eChzY3JvbGxQb3NpdGlvbi55KCksIDAuMGYpOwotICAgIHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6
bWluKHNjcm9sbFBvc2l0aW9uWSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVu
dFJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uWCwg
c2Nyb2xsUG9zaXRpb25ZKTsKLX0KLQotV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJl
ZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkpCi0gICAgOiBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkobGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSkKLSAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdlYkxheWVySUQpCi0gICAg
LCBtX2lzQWN0aXZlKGZhbHNlKQotewotfQotCi1XZWJMYXllclRyZWVSZW5kZXJlcjo6fldlYkxh
eWVyVHJlZVJlbmRlcmVyKCkKLXsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBXZWJM
YXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQotewotICAg
IEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KHRoaXMpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJM
YXllcihuZXdMYXllcik7Ci0gICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZy
b21MYXllcihmYWxzZSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKLX0KLQotdm9p
ZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0
JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQotewotICAg
IGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJl
TWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgQVNTRVJUKG1f
dGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5H
TE1vZGUpOwotCi0gICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwotICAgIEdyYXBo
aWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKLSAgICBpZiAoIWN1cnJl
bnRSb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExheWVyKTsKLQotICAgIGlm
ICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRUZXh0dXJlTWFwcGVy
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50
aW5nKFBhaW50RmxhZ3MpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKLQotICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5v
cGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBt
YXRyaXgpIHsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsK
LSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgICAg
IGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwotICAgIH0KLQotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5k
Q2xpcCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKLX0KLQotdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6
OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IHBhaW50ZXIpCi17Ci0gICAgaWYgKCFtX3RleHR1cmVN
YXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgp
OwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0
dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAg
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXll
cigpKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5z
ZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpblBhaW50aW5nKCk7Ci0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250
ZXh0KDApOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCi17Ci0gICAgbV9jb250ZW50
c1NpemUgPSBjb250ZW50c1NpemU7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIG1fdmlz
aWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5
KQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRM
YXllcnMoKQotewotICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25zIGFyZSB1cGRhdGVkIGJ5IHRoZSB3
ZWIgcHJvY2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJsZSBjb250ZW50cyByZWN0IC8gc2Ny
b2xsIHBvc2l0aW9uLgotICAgIC8vIElmIHdlIHdhbnQgdGhvc2UgbGF5ZXJzIHRvIGZvbGxvdyBh
Y2N1cmF0ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUgYmV0d2VlbiB0aGUgd2ViIHByb2Nl
c3MgdXBkYXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKLSAgICAvLyB0aGVtIGJ5IHRoZSBkZWx0YSBi
ZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIHZpZXdw
b3J0IHVzZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KLSAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0
aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlv
bigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKLSAgICBGbG9hdFBv
aW50IHJlbmRlcmVkU2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24sIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250
ZW50c1NpemUpOwotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHNjcm9sbFBvc2l0aW9uIC0gcmVuZGVy
ZWRTY3JvbGxQb3NpdGlvbjsKLQotICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVk
TGF5ZXJzLmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExh
eWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRvVGV4dHVyZU1hcHBlckxh
eWVyKGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOwot
fQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50
c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCi17Ci0gICAgaWYgKGNhbnZh
c1NpemUuaXNFbXB0eSgpIHx8ICFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIHJldHVybjsKLQot
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGVuc3VyZUxheWVyKGlkKTsKLSAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZTsKLSAgICBTdXJmYWNl
QmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmlu
ZChpZCk7Ci0gICAgaWYgKGl0ID09IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZW5kKCkpIHsKLSAg
ICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZSgpOwotICAgICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2Fu
dmFzQmFja2luZ1N0b3JlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzQmFja2luZ1N0b3Jl
ID0gaXQtPnNlY29uZDsKLQotICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJm
YWNlKGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjYW52YXNTaXplKTsKLSAgICBsYXllci0+c2V0Q29u
dGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBj
b25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkSURzKQotewotICAgIGVuc3VyZUxheWVyKGlk
KTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0gICAgVmVjdG9yPEdyYXBoaWNzTGF5
ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViTGF5ZXJJRCBjaGlsZElEID0gY2hpbGRJRHNbaV07Ci0g
ICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwotICAgICAg
ICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQp
LmxlYWtQdHIoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICB9Ci0gICAgbGF5
ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycyhXZWJMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGVuc3VyZUxheWVyKGlk
KTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBB
U1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBpdC0+c2Vjb25kOwotICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwotfQotI2VuZGlm
Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCi17Ci0gICAgZW5zdXJlTGF5ZXIoaWQp
OwotICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAgIEFT
U0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGl0LT5zZWNvbmQ7Ci0KLSAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlE
KGxheWVySW5mby5yZXBsaWNhKSk7Ci0gICAgbGF5ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQo
bGF5ZXJJbmZvLm1hc2spKTsKLQotICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9z
KTsKLSAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0gICAgbGF5ZXItPnNldFRy
YW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQo
bGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKLSAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
bGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNp
YmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOwotICAgIGxheWVyLT5zZXRDb250ZW50
c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwotICAgIGxheWVyLT5zZXRDb250ZW50
c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVu
dChsYXllckluZm8uZHJhd3NDb250ZW50KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxl
KGxheWVySW5mby5jb250ZW50c1Zpc2libGUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIobGF5ZXIpLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9y
dCk7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkKLSAgICAgICAgbV9maXhl
ZExheWVycy5hZGQoaWQsIGxheWVyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZml4ZWRMYXllcnMu
cmVtb3ZlKGlkKTsKLQotICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQpOwotCi0gICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBj
bGlwLgotICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/
IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwotICAgIGxheWVyLT5zZXRPcGFjaXR5
KGxheWVySW5mby5vcGFjaXR5KTsKLSAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZv
LnByZXNlcnZlczNEKTsKLSAgICBpZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExh
eWVySUQgIT0gaWQpCi0gICAgICAgIHNldFJvb3RMYXllcklEKGlkKTsKLX0KLQotdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQotewotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwotICAgIGlmICghbGF5
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0g
ICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwotICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxh
eWVySUQpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdT
dG9yZXMucmVtb3ZlKGxheWVySUQpOwotI2VuZGlmCi0gICAgZGVsZXRlIGxheWVyOwotfQotCi0K
LXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZUxheWVyKFdlYkxheWVySUQgaWQpCi17
Ci0gICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRoZSBuZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5h
Z2UgaXQgb3Vyc2VsdmVzLAotICAgIC8vIGJlY2F1c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4K
LSAgICBpZiAobV9sYXllcnMuZmluZChpZCkgPT0gbV9sYXllcnMuZW5kKCkpCi0gICAgICAgIG1f
bGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIoaWQpLmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsK
LSAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOwotCi0gICAgaWYgKCFsYXllcklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwot
fQotCi1QYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBXZWJMYXllclRyZWVSZW5kZXJlcjo6
Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCi17Ci0gICAgVGV4dHVyZU1hcHBlckxheWVy
KiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOwotICAgIEFTU0VS
VChsYXllcik7Ci0gICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBz
dGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQo
KSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgYmFja2luZ1N0b3JlID0gTGF5
ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3Jl
KGJhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgfQotICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwot
ICAgIHJldHVybiBiYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkK
LXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2Fs
ZSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJ
RCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+
cmVtb3ZlVGlsZSh0aWxlSUQpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRh
dGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYg
dXBkYXRlKQotewotICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
Z2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0
aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZh
Y2UsIHVwZGF0ZS5vZmZzZXQpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3Jl
YXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vh
a0JpdG1hcCkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0
bWFwOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci0gICAg
YmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1h
cC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJ
RCkKLXsKLSAgICBpZiAoIWltYWdlSUQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9N
ZWRpYSgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhhc2hNYXA8aW50NjRfdCwg
UmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJl
Y3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1Rv
TWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tp
bmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46
Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1f
dGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXll
ckNoYW5nZXMoKQotewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9w
ZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotCi0gICAgbV9yb290TGF5ZXIt
PnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKLSAgICBjb21taXRUaWxlT3BlcmF0
aW9ucygpOwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBm
b3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9u
ZS4KLSAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUsIHRoaXMpKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVu
ZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQot
ICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnJlbmRlck5leHRGcmFtZSgpOwot
fQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVSb290TGF5ZXIoKQotewotICAg
IGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV90ZXh0dXJlTWFw
cGVyKSB7Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShU
ZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1h
cHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50
aWFsaWFzaW5nKHRydWUpOwotICAgIH0KLQotICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIo
SW52YWxpZFdlYkxheWVySUQpOwotICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZh
bHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jv
b3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8v
IFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJl
IG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwg
MS4wKSk7Ci0gICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRU
ZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnN5bmNSZW1vdGVDb250ZW50KCkKLXsKLSAgICAvLyBXZSBlbnF1ZXVlIG1l
c3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4g
YWN0aXZlIEdMIGNvbnRleHQuCi0gICAgZW5zdXJlUm9vdExheWVyKCk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVu
ZGVyUXVldWVbaV0oKTsKLQotICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKLX0KLQotdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCi17Ci0gICAgVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLQot
ICAgIGlmIChsYXllcikKLSAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2
ZSgpOwotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7Ci0j
ZW5kaWYKLQotICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotICAgIG1fcm9v
dExheWVyLmNsZWFyKCk7Ci0gICAgbV9yb290TGF5ZXJJRCA9IEludmFsaWRXZWJMYXllcklEOwot
ICAgIG1fbGF5ZXJzLmNsZWFyKCk7Ci0gICAgbV9maXhlZExheWVycy5jbGVhcigpOwotICAgIG1f
dGV4dHVyZU1hcHBlci5jbGVhcigpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5jbGVhcigpOwotCi0gICAgc2V0QWN0aXZlKGZhbHNlKTsKLQotICAgIGNhbGxPbk1haW5U
aHJlYWQoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhp
cykpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMo
KQotewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci19Ci0KLXZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCi17Ci0gICAgbV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5ID0gMDsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXBwZW5kVXBk
YXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmICghbV9pc0Fj
dGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rp
b24pOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRBY3RpdmUoYm9vbCBhY3Rp
dmUpCi17Ci0gICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgotICAgIC8v
IElmIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhl
biB0aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUK
LSAgICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFu
Y2UuCi0gICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7
Ci0gICAgaWYgKG1faXNBY3RpdmUpCi0gICAgICAgIHJlbmRlck5leHRGcmFtZSgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4MTUyZTQwODNiNDIzZTlkMzY4NDc2YjRl
M2YwYmFlOGQ0YjRkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVm
IFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKLSNkZWZpbmUgV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAot
Ci0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFj
ZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
QmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7Ci1jbGFzcyBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OwotY2xhc3MgV2ViTGF5ZXJJbmZvOwotY2xhc3MgV2ViTGF5ZXJVcGRh
dGVJbmZvOwotCi1jbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlciA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxXZWJMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7Ci0gICAgICAg
IFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0OwotICAgICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gc3VyZmFjZTsKLSAg
ICAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0OwotICAgICAgICBUaWxlVXBkYXRlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG5ld1N1cmZhY2UsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBuZXdPZmZzZXQpCi0gICAgICAgICAgICA6IHNvdXJjZVJlY3Qoc291cmNlKQot
ICAgICAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdldCkKLSAgICAgICAgICAgICwgc3VyZmFjZShu
ZXdTdXJmYWNlKQotICAgICAgICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQotICAgICAgICB7Ci0g
ICAgICAgIH0KLSAgICB9OwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkqKTsKLSAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVSZW5kZXJlcigpOwotICAg
IHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDAp
OwotICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KTsKLSAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9p
ZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7Ci0gICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIHZv
aWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0
aW9uKTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKLQotICAg
IHZvaWQgZGV0YWNoKCk7Ci0gICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2b2lkIHNldEFjdGl2ZShi
b29sKTsKLQotICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRS
b290TGF5ZXJJRChXZWJMYXllcklEKTsKLSAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oV2ViTGF5
ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRl
KFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOwotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICB2b2lkIHNldExheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlVGlsZShXZWJMYXll
cklELCBpbnQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBjb25zdCBUaWxlVXBk
YXRlJik7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY3JlYXRlSW1h
Z2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLSAgICB2b2lkIGRlc3Ry
b3lJbWFnZShpbnQ2NF90KTsKLQotcHJpdmF0ZToKLSAgICBQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwotCi0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJuIChpZCA9PSBJbnZh
bGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQotICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0K
LSAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5
bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVh
bCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRl
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Ci0gICAgdm9pZCBjYWxsT25NYWluVHJl
YWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JG
aXhlZExheWVycygpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9jb250
ZW50c1NpemU7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsK
LQotICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20gbWFpbiB0aHJl
YWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCi0gICAgVmVjdG9yPEZ1bmN0aW9uPHZv
aWQoKT4gPiBtX3JlbmRlclF1ZXVlOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIE93
blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgUGFzc1Jl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQpOwotICAg
IEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0gICAgSGFzaFNldDxSZWZQdHI8TGF5
ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotI2Vu
ZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxh
eWVySUQsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4g
PiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwotICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9z
dXJmYWNlQmFja2luZ1N0b3JlczsKLSNlbmRpZgotCi0gICAgdm9pZCBzY2hlZHVsZVdlYlZpZXdV
cGRhdGUoKTsKLSAgICB2b2lkIHN5bmNocm9uaXplVmlld3BvcnQoKTsKLSAgICB2b2lkIGFzc2ln
bkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsK
LSAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwotICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5
ZXJJRCk7Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucygpOwotICAgIHZvaWQgc3luY0Fu
aW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZvaWQgcHVyZ2VC
YWNraW5nU3RvcmVzKCk7Ci0KLSAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBtX2xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk7Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IG1fcm9vdExheWVyOwotICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwot
Ci0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgTGF5ZXJNYXAgbV9maXhlZExheWVyczsKLSAg
ICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9wZW5k
aW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIGJvb2wgbV9pc0FjdGl2ZTsK
LX07Ci0KLX07Ci0KLSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLQotI2VuZGlm
IC8vIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCmluZGV4IGZkMGMwZWFjYjk0MzdhNzlmM2I4MGE3MDkyMzYzMWJlZTY0
ODg0MWYuLjVjNTIyYzA2ZmE1NzVkNzYzNzZlN2MxMDMyOWQ0N2M4M2NlODYxMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05NCw3ICs5NCw3IEBACiAj
aW5jbHVkZSAiV2ViSW50ZW50U2VydmljZUluZm8uaCIKICNlbmRpZgogCi0jaWYgVVNFKFVJX1NJ
REVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUg
IkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgogI2VuZGlmCiAKQEAgLTE3NDcs
NyArMTc0Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXll
clRyZWVDb29yZGluYXRvclByb3h5PigpKSB7CiAgICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJl
Y2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdl
SUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKaW5kZXggNGRlNzdmNzBhMzk1YzZhMTEzNTQ2
ODE2YWM5NTQ5ODc1NTg2NWE4OS4uZWI3MDIzOTkwMTk0OTYxYzlkYjgzZjVlNjNkNDFkMGIwY2I0
OTI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNH
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9k
ZS5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJR
dFdlYlBhZ2VTR05vZGUuaCIKIAotI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisj
aW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlIDxRdEd1aS9RUG9seWdvbkY+
CiAjaW5jbHVkZSA8UXRRdWljay9RU0dTaW1wbGVSZWN0Tm9kZT4KICNpbmNsdWRlIDxwcml2YXRl
L3FzZ3JlbmRlcm5vZGVfcC5oPgpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgQ29udGVudHNTR05vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7CiBwdWJsaWM6
Ci0gICAgQ29udGVudHNTR05vZGUoUGFzc1JlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gcmVu
ZGVyZXIpCisgICAgQ29udGVudHNTR05vZGUoUGFzc1JlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4g
cmVuZGVyZXIpCiAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikKICAgICB7CiAgICAgICAg
IGxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZSh0cnVlKTsKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogICAgICAgICBsYXllclRyZWVSZW5kZXJlcigpLT5wdXJnZUdMUmVzb3VyY2VzKCk7
CiAgICAgfQogCi0gICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorICAgIExheWVyVHJlZVJlbmRlcmVy
KiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0K
IAogcHJpdmF0ZToKICAgICBRUmVjdEYgY2xpcFJlY3QoKSBjb25zdApAQCAtMTA1LDcgKzEwNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHRSZWN0OwogICAgIH0KIAotICAgIFJl
ZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsKKyAgICBSZWZQdHI8TGF5ZXJU
cmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CiB9OwogCiBRdFdlYlBhZ2VTR05vZGU6OlF0V2ViUGFn
ZVNHTm9kZSgpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldFNj
YWxlKGZsb2F0IHNjYWxlKQogICAgIHNldE1hdHJpeChtYXRyaXgpOwogfQogCi12b2lkIFF0V2Vi
UGFnZVNHTm9kZTo6c2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4g
cmVuZGVyZXIpCit2b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxM
YXllclRyZWVSZW5kZXJlcj4gcmVuZGVyZXIpCiB7CiAgICAgaWYgKG1fY29udGVudHNOb2RlICYm
IG1fY29udGVudHNOb2RlLT5sYXllclRyZWVSZW5kZXJlcigpID09IHJlbmRlcmVyKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2Rl
LmgKaW5kZXggMjJhNWJjZmJhZWMyMGFiODM0Yzg4Nzg1YTczYWFiNTc2NTU1Njg4Ni4uMTFkMTg5
ODRlZGExZTg4MTc5MGY5MmViOWNhMmQxYWIxZWY0OTlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApAQCAtMzEsMTQgKzMxLDE0IEBAIFFUX0VO
RF9OQU1FU1BBQ0UKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBDb250ZW50c1NHTm9kZTsK
LWNsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CiAK
IGNsYXNzIFF0V2ViUGFnZVNHTm9kZSA6IHB1YmxpYyBRU0dUcmFuc2Zvcm1Ob2RlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIFF0V2ViUGFnZVNHTm9kZSgpOwogICAgICAgICB2b2lkIHNldEJhY2tn
cm91bmQoY29uc3QgUVJlY3RGJiwgY29uc3QgUUNvbG9yJik7CiAgICAgICAgIHZvaWQgc2V0U2Nh
bGUoZmxvYXQpOwotICAgICAgICB2b2lkIHNldFJlbmRlcmVyKFBhc3NSZWZQdHI8V2ViTGF5ZXJU
cmVlUmVuZGVyZXI+KTsKKyAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihQYXNzUmVmUHRyPExheWVy
VHJlZVJlbmRlcmVyPik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBDb250ZW50c1NHTm9kZSog
bV9jb250ZW50c05vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4
bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXht
YXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
M2RiZTBjYmE1MWNiNzQ0MmNkYmM0NzhhYmViMWVhZjc0ZTA5NWNlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90
ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAg
QEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKLQotI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJTaGFy
ZWFibGVTdXJmYWNlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewotICAgIGlmICghbV9zdXJmYWNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChtX3RhcmdldFJl
Y3QpOwotICAgIHRhcmdldFJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsKLSAgICBib29sIHNob3Vs
ZFJlc2V0ID0gZmFsc2U7Ci0gICAgaWYgKHRhcmdldFJlY3QgIT0gcmVjdCgpKSB7Ci0gICAgICAg
IHNldFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9
Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7Ci0g
ICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVh
dGVUZXh0dXJlKCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7Ci0gICAgICAg
IHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkUmVzZXQpCi0gICAg
ICAgIHRleHR1cmUtPnJlc2V0KG1fdGFyZ2V0UmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3Mo
KSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBv
cnRzQWxwaGEgOiAwKTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBt
X3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJmYWNlLmNsZWFyKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIG1f
c291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsK
LSAgICBtX3N1cmZhY2VPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdXJmYWNlID0gYnVmZmVyOwot
fQotCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKGludCBpZCwgZmxvYXQgc2Nh
bGUpCi17Ci0gICAgbV90aWxlcy5hZGQoaWQsIExheWVyQmFja2luZ1N0b3JlVGlsZShzY2FsZSkp
OwotICAgIG1fc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6cmVt
b3ZlVGlsZShpbnQgaWQpCi17Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmFwcGVuZChpZCk7Ci19Ci0K
LQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+
c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOwotICAgIGl0LT5zZWNvbmQuc2V0QmFja0J1
ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwotfQotCi1Q
YXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29u
c3QKLXsKLSAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJh
Y2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0g
aXQtPnNlY29uZC50ZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXh0dXJlKQotICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4oKTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkU2hvd1RpbGVEZWJ1Z1Zpc3VhbHMoKQot
ewotI2lmIFBMQVRGT1JNKFFUKQotICAgIHJldHVybiAocWdldGVudigiUVRfV0VCS0lUX1NIT1df
Q09NUE9TSVRJTkdfREVCVUdfVklTVUFMUyIpID09ICIxIik7Ci0jZW5kaWYKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwg
Qml0bWFwVGV4dHVyZSogbWFzaykKLXsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0
aWxlc1RvUGFpbnQ7Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBw
YWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KLSAgICBIYXNoTWFwPGludCwg
TGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAg
ICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25k
OwotICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0gICAgICAgICAgICB0aWxl
c1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRp
bGUucmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90
aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAgLy8gV2Ugc2hvdyB0aGUg
cHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBh
bnkgY3VycmVudC1zY2FsZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292
ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICB0aWxlc1RvUGFpbnQucHJlcGVuZCgmdGlsZSk7Ci0gICAgfQotCi0gICAgLy8g
VE9ETzogV2hlbiB0aGUgVGV4dHVyZU1hcHBlciBtYWtlcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4g
c29tZSBlZGdlcyBleHBvc2VkIGFuZCBubyBlZGdlcwotICAgIC8vIGV4cG9zZWQsIHRoZSB2YWx1
ZSBwYXNzZWQgc2hvdWxkIGJlIGFuIGFjY3VyYXRlIHJlZmxlY3Rpb24gb2YgdGhlIHRpbGUgc3Vi
c2V0IHRoYXQgd2UgYXJlCi0gICAgLy8gcGFzc2luZy4gRm9yIG5vdyB3ZSBqdXN0ICJlc3RpbWF0
ZSIgc2luY2UgTGF5ZXJCYWNraW5nU3RvcmUgZG9lc24ndCBrZWVwIGluZm9ybWF0aW9uIGFib3V0
Ci0gICAgLy8gdGhlIHRvdGFsIHRpbGVkIHN1cmZhY2UgcmVjdCBhdCB0aGUgbW9tZW50LgotICAg
IHVuc2lnbmVkIGVkZ2VzRXhwb3NlZCA9IG1fdGlsZXMuc2l6ZSgpID4gMSA/IFRleHR1cmVNYXBw
ZXI6Ok5vRWRnZXMgOiBUZXh0dXJlTWFwcGVyOjpBbGxFZGdlczsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHRpbGVzVG9QYWludC5zaXplKCk7ICsraSkgewotICAgICAgICBUZXh0dXJlTWFw
cGVyVGlsZSogdGlsZSA9IHRpbGVzVG9QYWludFtpXTsKLSAgICAgICAgdGlsZS0+cGFpbnQodGV4
dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCBlZGdlc0V4cG9zZWQpOwotICAg
ICAgICBzdGF0aWMgYm9vbCBzaG91bGREZWJ1ZyA9IHNob3VsZFNob3dUaWxlRGVidWdWaXN1YWxz
KCk7Ci0gICAgICAgIGlmICghc2hvdWxkRGVidWcpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3Qm9yZGVyKENvbG9yKDB4RkYsIDAsIDApLCAyLCB0
aWxlLT5yZWN0KCksIHRyYW5zZm9ybSk7Ci0gICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdSZXBh
aW50Q291bnRlcihzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZVRpbGUqPih0aWxlKS0+cmVw
YWludENvdW50KCksIDgsIHRpbGVzVG9QYWludFtpXS0+cmVjdCgpLmxvY2F0aW9uKCksIHRyYW5z
Zm9ybSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3Bl
cmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewotICAgIFZlY3RvcjxpbnQ+
OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5kID0gbV90aWxlc1RvUmVtb3ZlLmVuZCgpOwotICAg
IGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1RvUmVtb3ZlLmJlZ2luKCk7
IGl0ICE9IHRpbGVzVG9SZW1vdmVFbmQ7ICsraXQpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKCpp
dCk7Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBIYXNoTWFwPGludCwgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwot
ICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNl
Y29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAv
TGF5ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy90ZXhtYXAvTGF5
ZXJCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE0ZjUxM2Ew
NWI4OTEzOTgwOTNlNjdhYmY1MTE5M2ExYTk2ZTUwNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xh
eWVyQmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBMYXllckJhY2tpbmdTdG9y
ZV9oCi0jZGVmaW5lIExheWVyQmFja2luZ1N0b3JlX2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQotCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotY2xhc3MgU2hhcmVhYmxlU3VyZmFjZTsKLQotY2xhc3MgTGF5ZXJCYWNr
aW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlIHsKLXB1Ymxp
YzoKLSAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQotICAgICAgICA6
IFRleHR1cmVNYXBwZXJUaWxlKFdlYkNvcmU6OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2Nh
bGUoc2NhbGUpCi0gICAgICAgICwgbV9yZXBhaW50Q291bnQoMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGlu
bGluZSB2b2lkIGluY3JlbWVudFJlcGFpbnRDb3VudCgpIHsgKyttX3JlcGFpbnRDb3VudDsgfQot
ICAgIGlubGluZSBpbnQgcmVwYWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Q291
bnQ7IH0KLSAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAg
ICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGJ1ZmZlciwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gbV9zdXJmYWNlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OwotICAg
IFdlYkNvcmU6OkludFJlY3QgbV90YXJnZXRSZWN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IG1f
c3VyZmFjZU9mZnNldDsKLSAgICBmbG9hdCBtX3NjYWxlOwotICAgIGludCBtX3JlcGFpbnRDb3Vu
dDsKLX07Ci0KLWNsYXNzIExheWVyQmFja2luZ1N0b3JlIDogcHVibGljIFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUgewotcHVibGljOgotICAgIHZvaWQgY3JlYXRlVGlsZShpbnQs
IGZsb2F0KTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUo
aW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMYXllckJhY2tpbmdTdG9yZSk7IH0KLSAgICB2b2lkIGNvbW1pdFRpbGVP
cGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNv
cmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQs
IFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsKLQotcHJpdmF0ZToKLSAgICBMYXllckJhY2tpbmdT
dG9yZSgpCi0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICBIYXNoTWFwPGludCwg
TGF5ZXJCYWNraW5nU3RvcmVUaWxlPiBtX3RpbGVzOwotICAgIFZlY3RvcjxpbnQ+IG1fdGlsZXNU
b1JlbW92ZTsKLSAgICBmbG9hdCBtX3NjYWxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVyQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKaW5k
ZXggMTdkNTQ5M2IwYWIzYWU5NDg0YzRiYWIwOGZkN2Y4YWI1M2JhY2Y3NC4uNGY0OGM3YTQ0ZjYx
N2Y3NTQ0YTRiNjdhMGU5ZjgxMDhmZmQ4Mzk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKQEAgLTI2LDYgKzI2
LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQVBJL2Nw
cC9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9BUEkvcXQgXAogICAgICQkU09VUkNF
X0RJUi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24gXAorICAgICQkU09VUkNFX0RJUi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9Eb3du
bG9hZHMgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyIFwKICAg
ICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9xdCBcCkBAIC01OCw3ICs1
OSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UgXAotICAgICQkU09VUkNF
X0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IgXAorICAgICQkU09V
UkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRT
T1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAogICAgICQkU09VUkNFX0RJUi9QbHVnaW5Qcm9jZXNz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAzYWY1OTY2MjZiMThlNDIyZjBkMTRjMGYw
MGI0NDY2YmNhNDMzMWEwLi5jN2ZjOWE3YjczMTkyY2JlOWYzMmVjYzg4NzFmMzBjYzMwOTI0Zjcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC02MzgsNyArNjM4LDcgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVu
dGlsTW91c2VNb3ZlcykKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6
c2NoZWR1bGVBbmltYXRpb24oKQogewotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmxh
eWVyVHJlZUhvc3QoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDg5ZTc0YWNhNjA2Y2YwMDJmYWNiOTU1YzM1N2NkYmRmZWQ2YzJhZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKQEAgLTAsMCArMSw3NTgg
QEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgiCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllclRyZWVD
b29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCit7CisgICAgc3RhdGljIEhhc2hNYXA8
V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gZ2xvYmFsTWFwOworICAgIHJl
dHVybiBnbG9iYWxNYXA7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQoreworICAg
IEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4mIHRhYmxlID0g
bGF5ZXJCeUlETWFwKCk7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsKKyAgICBpZiAoaXQgPT0g
dGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpdC0+c2Vjb25kOwor
fQorCitzdGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhpY3NMYXllciogbGF5ZXIp
Cit7CisgICAgcmV0dXJuIGxheWVyID8gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5pZCgpIDogMDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5n
ZUxheWVyU3RhdGUoKQoreworICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSB0cnVlOworICAg
IGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlz
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVu
KCkKK3sKKyAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7CisgICAgaWYgKGNsaWVudCgp
KQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOworfQorCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUZpbHRlcnMoKQoreworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOworICAgIGlm
IChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsK
K30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghdHJhbnNmb3JtKCkuaXNBZmZpbmUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAg
ICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+c2V0U2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgIHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5n
ZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgc2V0U2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDog
R3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX21hc2tUYXJnZXQoMCkKKyAgICAsIG1faW5V
cGRhdGVNb2RlKGZhbHNlKQorICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQor
ICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jQ2hp
bGRyZW4odHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9jYW52
YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCgwKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX2NhbnZhc1BsYXRmb3Jt
TGF5ZXIoMCkKK3sKKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7CisgICAg
bV9pZCA9IG5leHRMYXllcklEKys7CisgICAgbGF5ZXJCeUlETWFwKCkuYWRkKGlkKCksIHRoaXMp
OworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgpKTsKKworICAgIGlmIChtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKKyAgICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmRldGFjaExh
eWVyKHRoaXMpOworICAgIH0KKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgR3JhcGhpY3NM
YXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikK
K3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwor
ICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogY2hpbGQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Cisg
ICAgICAgIGNoaWxkLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOworICAgICAgICBjaGlsZC0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworICAgIH0KKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NM
YXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOworICAg
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAg
ICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCit7Cisg
ICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7CisgICAgdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOworICAgIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIGRp
ZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5n
KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOwor
ICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsK
KyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciog
c2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJs
aW5nKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7
CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0
YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhp
Y3NMYXllciogbmV3Q2hpbGQpCit7CisgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxh
Y2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpOworICAgIGlmICghb2spCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKG5ld0NoaWxkKS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHBhcmVudExh
eWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQorICAgICAgICBwYXJl
bnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVG
cm9tUGFyZW50KCk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQor
eworICAgIGlmIChwb3NpdGlvbigpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7CisgICAgZGlkQ2hh
bmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmICh0aGlzLT5zaXplKCkgPT0gc2l6
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsK
KyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1h
c2tMYXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAg
aWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0
cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNE
KGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NU
b0JvdW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQorICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBk
aWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsK
KworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRz
QXJlVmlzaWJsZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1Zpc2libGUoYik7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIp
Cit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0
U3VwcG9ydHNBbHBoYSghYik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUo
Yik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKK3sKKyAgICBpZiAoYmFj
a2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NM
YXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGNvbnRlbnRz
UmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCit7CisgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7CisgICAgc2V0Q29udGVudHNUb0ltYWdlKDAp
OworICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7CisgICAgbV9jYW52YXNOZWVk
c0Rpc3BsYXkgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5v
dGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcikKK3sK
KyAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxheWVyOworICAgIG1fY2FudmFz
TmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgp
LT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Citib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBuZXdGaWx0ZXJzKQoreworICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVy
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGlkQ2hhbmdlRmlsdGVycygpOworICAgIHJl
dHVybiBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOworfQorI2VuZGlmCisK
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpbnQ2NF90IG5ld0lEID0gMDsKKyAgICBpZiAobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQpIHsKKyAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0
aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRp
bmcgdGhlIGltYWdlLgorICAgICAgICBuZXdJRCA9IG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKKyAgICAgICAgbV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVy
SW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBuZXdJRCA9
PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgor
ICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgICAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgfQorCisgICAgbV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCA9IG5ld0lEOworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IGlmIChsYXllciA9PSBtYXNrTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKKworICAgIGlmICghbGF5ZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7CisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihsYXllcik7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLT5zZXRDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlzKTsK
KyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAg
ICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAg
IGlmIChsYXllciA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGxheWVyKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCk7CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7
CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCku
aGVpZ2h0KCkpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX21haW5C
YWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRS
ZWN0KHJlY3QpKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK1dlYkxheWVySUQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKKyAg
ICAgICAgbWFzay0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAg
ICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQorICAgICAgICByZXBsaWNhLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGls
ZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZShyZWN0KTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKK3sKKyAgICBpZiAoIW1fc2hv
dWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jQ2hpbGRy
ZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRJRHM7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZElE
cy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKworICAgIG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7
Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0ZpbHRlcnMoKQoreworICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKKyAgICBtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0
ZXJzKCkpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
TGF5ZXJTdGF0ZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOworICAgIG1fbGF5
ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOworCisgICAgbV9sYXll
ckluZm8uYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludCgpOworICAgIG1fbGF5ZXJJbmZvLmJhY2tm
YWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIG1fbGF5ZXJJbmZvLmNoaWxk
cmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX2xheWVySW5mby5jb250
ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNS
ZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0gZHJh
d3NDb250ZW50KCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVudHNB
cmVWaXNpYmxlKCk7CisgICAgbV9sYXllckluZm8ubWFzayA9IHRvV2ViTGF5ZXJJRChtYXNrTGF5
ZXIoKSk7CisgICAgbV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsK
KyAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAgIG1fbGF5ZXJJbmZvLnBh
cmVudCA9IHRvV2ViTGF5ZXJJRChwYXJlbnQoKSk7CisgICAgbV9sYXllckluZm8ucG9zID0gcG9z
aXRpb24oKTsKKyAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7Cisg
ICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBsaWNhTGF5ZXIoKSk7Cisg
ICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKKyAgICBtX2xheWVySW5mby50cmFuc2Zvcm0g
PSB0cmFuc2Zvcm0oKTsKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3lu
Y0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c3luY0NhbnZhcygpCit7CisgICAgaWYgKCFtX2NhbnZhc05lZWRzRGlzcGxh
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFw
aGljc1N1cmZhY2UoKTsKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3lu
Y0NhbnZhcyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBn
cmFwaGljc1N1cmZhY2VUb2tlbik7CisjZW5kaWYKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9
IGZhbHNlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZW5zdXJlSW1hZ2VC
YWNraW5nU3RvcmUoKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAgbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCkKK3sKKyAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBi
eSBwdXJnZUJhY2tpbmdTdG9yZXMuCisgICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKKyAg
ICBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHN5bmNDaGlsZHJlbigpOwor
ICAgIHN5bmNMYXllclN0YXRlKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN5bmNG
aWx0ZXJzKCk7CisjZW5kaWYKKyAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOworICAgIHN5bmND
YW52YXMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRCZWdpbigpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCit7CisgICAgbV9sYXllckluZm8uaXNSb290TGF5
ZXIgPSBpc1Jvb3Q7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmIChtX21haW5C
YWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJ
Zk5lZWRlZCh0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgbV9jb250ZW50c1Nj
YWxlID0gc2NhbGU7CisgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOworfQorCitmbG9hdCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQoreworICAgIHJl
dHVybiBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpID8gbV9jb250ZW50c1NjYWxlIDogMTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUo
KQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV9tYWluQmFja2luZ1N0b3JlIHx8IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2Fs
ZSgpID09IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gQmV0d2VlbiBjcmVhdGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRo
ZSBjb250ZW50LAorICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9u
ZSBhcyB0aGF0IG1pZ2h0IHJlc3VsdCBpbgorICAgIC8vIGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJp
bmcgYXMgdGhlIG9sZCB0aWxlcyBtYXkgYmUgZHJvcHBlZCBiZWZvcmUKKyAgICAvLyBzb21ldGhp
bmcgcmVwbGFjZXMgdGhlbS4KKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbV9tYWluQmFj
a2luZ1N0b3JlLnJlbGVhc2UoKTsKKworICAgIC8vIE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2
aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlzaWJsZSBhcmVhcy4KKyAgICBtX3ByZXZpb3Vz
QmFja2luZ1N0b3JlLT5yZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKTsKKworICAgIGNyZWF0ZUJh
Y2tpbmdTdG9yZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRl
QmFja2luZ1N0b3JlKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcg
VGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRo
aXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50
c09wYXF1ZSgpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCit7Cit9CisKK2Jvb2wgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5sYXllclRyZWVU
aWxlVXBkYXRlc0FsbG93ZWQoKTsKK30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKK3sKKyAgICByZXR1cm4gSW50UmVj
dCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KKworYm9vbCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkKK3sKKyAg
ICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKK30KKwor
SW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJs
ZVJlY3QoKQoreworICAgIGlmICghc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSkKKyAgICAg
ICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7CisKKyAgICAvLyBOb24t
aW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIGlmICghbV9sYXllclRyYW5z
Zm9ybS5jb21iaW5lZCgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworCisgICAgLy8gUmV0dXJuIGEgcHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWN0IChzdXJm
YWNlIGNvb3JkaW5hdGVzKSBvbnRvIHRoZSBsYXllcidzIHBsYW5lIChsYXllciBjb29yZGluYXRl
cykuCisgICAgLy8gVGhlIHJlc3VsdGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQgYW5kIHRoZSB2
aXNpYmxlIHJlY3QgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCisgICAgLy8gc28g
aXQgbWlnaHQgc3ByZWFkIGZ1cnRoZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFyZWEgKGFuZCB0
aGVuIGV2ZW4gbW9yZSBhbXBsaWZpZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlwbGllcikuCisg
ICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlu
dmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnZpc2libGVDb250ZW50c1JlY3QoKSkp
KSk7Cit9CisKK0NvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgp
ID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OworfQorCitQYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFj
ZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0
dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUo
c2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEsIGhhbmRsZSwgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUlu
Zm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJn
ZXRSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRpbGVJRCkK
K3sKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVtb3ZlVGlsZShpZCgp
LCB0aWxlSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29u
dGVudEJ1ZmZlcnMoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgbV9t
YWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUu
Y2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1faW5VcGRhdGVNb2RlID0g
dHJ1ZTsKKyAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1h
aW4gdGlsZWQgYmFja2luZyBzdG9yZSwgb25jZSB3ZQorICAgIC8vIGhhdmUgYSByZW1vdGUgY2xp
ZW50IGFuZCB3ZSBhcmUgcmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4K
KyAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgY3JlYXRlQmFja2luZ1N0b3Jl
KCk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworICAgIG1f
aW5VcGRhdGVNb2RlID0gZmFsc2U7CisKKyAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9y
ZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1v
dmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZp
cnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92
ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3Jl
LT52aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQorICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOworICAgIG1fcHJl
dmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKworICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJh
Y2tpbmdTdG9yZUlEKSB7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCk7CisgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOworICAgIH0K
KworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCit7CisgICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50ID09IGNsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciog
cmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAg
ICAgICAgcmVwbGljYS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7
CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKKyAgICAgICAgbWFzay0+c2V0Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcih0aGlzLT5jaGlsZHJlbigpW2ld
KTsKKyAgICAgICAgbGF5ZXItPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChjbGll
bnQpOworICAgIH0KKworICAgIC8vIFdlIGhhdmUgdG8gcmVsZWFzZSByZXNvdXJjZXMgb24gdGhl
IFVJIHByb2Nlc3MgaGVyZSBpZiB0aGUgcmVtb3RlIGNsaWVudCBoYXMgY2hhbmdlZCBvciBpcyBy
ZW1vdmVkLgorICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgeworICAg
ICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQtPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICBtX0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKKyAgICBpZiAoY2xpZW50KQorICAgICAgICBj
bGllbnQtPmF0dGFjaExheWVyKHRoaXMpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YWRqdXN0VmlzaWJsZVJlY3QoKQoreworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUp
CisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlz
aWJsZVJlY3QoKQoreworICAgIGlmICghbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSBmYWxzZTsKKyAgICBt
X2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybSgpKTsKKyAgICBtX2xh
eWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5z
ZXRTaXplKHNpemUoKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFwcmVz
ZXJ2ZXMzRCgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldENoaWxkcmVuVHJhbnNmb3JtKGNo
aWxkcmVuVHJhbnNmb3JtKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZVRyYW5zZm9y
bXMocGFyZW50KCkgPyB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5
ZXJUcmFuc2Zvcm0uY29tYmluZWRGb3JDaGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSk7CisKKyAgICAvLyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxl
ZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0LgorICAgIGFkanVzdFZpc2libGVSZWN0KCk7CisgICAg
YWRqdXN0Q29udGVudHNTY2FsZSgpOworfQorCitzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBjcmVhdGVDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKGNsaWVudCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW5pdEZh
Y3RvcnkoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdyYXBoaWNzTGF5ZXJGYWN0b3J5KGNy
ZWF0ZUNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKK3sKKyAg
ICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0FmZmluZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZlMGM1N2RkNTNlNDRjZGQ4NTVkMDI4MTRiMzVhODVhZWEzMTA0ZTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAtMCwwICsxLDIwOCBAQAor
ICAgIC8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
X2gKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQz
RC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldl
YkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDb29yZGlu
YXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQp
ID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93
ZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRl
KFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jikg
PSAwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVy
RmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAw
OworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Cit9OworfQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciA6IHB1
YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICwgcHVi
bGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZpcnR1YWwgfkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOworCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJv
bSBHcmFwaGljc0xheWVyLmguCisgICAgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7CisgICAg
dm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCk7CisgICAgdm9pZCBhZGRD
aGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBhZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgYm9vbCByZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92
ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsK
KyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpOworICAgIHZvaWQg
c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wp
OworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAgICB2b2lkIHNldERyYXdzQ29u
dGVudChib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKTsKKyAgICB2b2lk
IHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOworICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wpOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAgdm9pZCBzZXRDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdl
Kik7CisgICAgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKKyAgICB2
b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXRSZXBsaWNhdGVk
QnlMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKKyAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lk
IHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZs
b2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShj
b25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIGJvb2wgc2V0
RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0
Um9vdExheWVyKGJvb2wpOworCisgICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Cisg
ICAgc3RhdGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYktpdDo6V2Vi
TGF5ZXJJRCk7CisgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOworICAgIEltYWdlKiBpbWFnZSgp
IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKworICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkg
Y29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3BvcnQ7IH0KKyAgICB2b2lkIHNldEZpeGVkVG9W
aWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9CisK
KyAgICBHcmFwaGljc0xheWVyKiBtYXNrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGFy
Z2V0OyB9CisgICAgdm9pZCBzZXRNYXNrVGFyZ2V0KEdyYXBoaWNzTGF5ZXIqIGxheWVyKSB7IG1f
bWFza1RhcmdldCA9IGxheWVyOyB9CisKKyAgICBzdGF0aWMgdm9pZCBpbml0RmFjdG9yeSgpOwor
CisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVQYWludEJlZ2luKCk7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0
b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFp
bnRlZEFyZWEpOworICAgIHZpcnR1YWwgYm9vbCB0aWxlZEJhY2tpbmdTdG9yZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVu
dHNSZWN0KCk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJl
Y3QoKTsKKyAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CisKKyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50IHRpbGVJRCk7
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJLaXQ6OlNoYXJlYWJsZVN1
cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CisKKyAgICB2b2lkIHNldENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCopOworICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CisgICAgdm9pZCBzeW5jTGF5ZXJT
dGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7
CisjZW5kaWYKKyAgICB2b2lkIHN5bmNDYW52YXMoKTsKKyAgICB2b2lkIGVuc3VyZUltYWdlQmFj
a2luZ1N0b3JlKCk7CisKKyAgICB2b2lkIGFkanVzdFZpc2libGVSZWN0KCk7CisgICAgYm9vbCBp
c1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRC
dWZmZXJzKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgV2ViS2l0OjpXZWJMYXllcklE
IG1faWQ7CisgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87CisgICAgUmVmUHRy
PEltYWdlPiBtX2ltYWdlOworICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1RhcmdldDsKKyAgICBG
bG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OworICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0g
bV9sYXllclRyYW5zZm9ybTsKKyAgICBib29sIG1faW5VcGRhdGVNb2RlIDogMTsKKyAgICBib29s
IG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXll
clN0YXRlOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7CisgICAgYm9vbCBt
X3Nob3VsZFN5bmNGaWx0ZXJzOiAxOworICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwor
ICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOworCisgICAgdm9pZCBub3RpZnlDaGFu
Z2UoKTsKKyAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJlbigpOworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKKyAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKKyNlbmRpZgorCisgICAg
dm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKworICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZl
Tm9uQWZmaW5lVHJhbnNmb3JtcygpOworICAgIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nU3Rv
cmUoKTsKKyAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKyAgICB2b2lkIGNvbXB1dGVU
cmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgdm9pZCBzeW5jTGF5ZXJQYXJhbWV0ZXJzKCk7
CisgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworICAgIGZsb2F0IGVmZmVj
dGl2ZUNvbnRlbnRzU2NhbGUoKTsKKworICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50KiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudDsKKyAgICBPd25QdHI8
V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdTdG9yZTsKKyAgICBPd25Q
dHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNCYWNraW5nU3RvcmU7Cisg
ICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxh
dGZvcm1MYXllcjsKK307CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9CisjZW5kaWYKKworI2VuZGlmIC8v
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRUaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTYyNDRlMmQ5ZGQwZmM5NDE2ODEyZGM2
ZGY2Zjc0NTAwNjZmZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcApAQCAt
MCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorCisjaWYgVVNFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiVGls
ZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitDb29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29y
ZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2lu
Z1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKKyAgICA6IG1fY2xpZW50
KGNsaWVudCkKKyAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCisg
ICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAgLCBtX3JlY3QodGlsZWRCYWNr
aW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCisgICAgLCBt
X0lEKDApCisgICAgLCBtX2RpcnR5UmVjdChtX3JlY3QpCit7Cit9CisKK0Nvb3JkaW5hdGVkVGls
ZTo6fkNvb3JkaW5hdGVkVGlsZSgpCit7CisgICAgaWYgKG1fSUQpCisgICAgICAgIG1fY2xpZW50
LT5yZW1vdmVUaWxlKG1fSUQpOworfQorCitib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sK
KyAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3Jl
Y3QpOworICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Cit9CisKK1ZlY3RvcjxJbnRS
ZWN0PiBDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQoreworICAgIGlmICghaXNE
aXJ0eSgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisKKyAgICBTdXJmYWNl
VXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6
ZSgpLCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7
CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVj
dD4oKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAt
bV9kaXJ0eVJlY3QueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSht
X3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUt
PmNvbnRlbnRzU2NhbGUoKSkpOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50
aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tp
bmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOworCisgICAgdXBkYXRlSW5mby51
cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUo
LW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKKyAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0g
bV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOworICAgIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7CisKKyAgICBzdGF0aWMgaW50IGlkID0gMDsKKyAgICBpZiAoIW1fSUQpIHsK
KyAgICAgICAgbV9JRCA9ICsraWQ7CisgICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQs
IHVwZGF0ZUluZm8sIG1fcmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT51cGRh
dGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7CisKKyAgICBtX2RpcnR5UmVjdCA9IElu
dFJlY3QoKTsKKyAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQoreworICAgIC8vIEhhbmRsZWQgYnkg
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6Omlz
UmVhZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX0lEOworfQorCit2b2lkIENv
b3JkaW5hdGVkVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgbV9yZWN0
ID0gSW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7CisgICAgbV9kaXJ0eVJlY3Qg
PSBtX3JlY3Q7Cit9CisKK0Nvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OkNvb3JkaW5hdGVkVGlsZUJh
Y2tlbmQoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChjbGll
bnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gQ29vcmRpbmF0ZWRUaWxlQmFj
a2VuZDo6Y3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5n
U3RvcmUsIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQor
eworICAgIHJldHVybiBDb29yZGluYXRlZFRpbGU6OmNyZWF0ZShtX2NsaWVudCwgdGlsZWRCYWNr
aW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKTsKK30KKwordm9pZCBDb29yZGluYXRlZFRpbGVCYWNr
ZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRp
bGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkVGlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0ZDExMzRmMDQyZTlmNTJlMDNmY2I0
MTJjMDNkMzM3YTY0NTc5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaApAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGlu
YXRlZFRpbGVfaAorI2RlZmluZSBDb29yZGluYXRlZFRpbGVfaAorCisjaWYgVVNFKFRJTEVEX0JB
Q0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVkZSAi
VGlsZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViQ29y
ZS9JbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEltYWdlQnVmZmVyOwor
Y2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBDb29yZGluYXRlZFRpbGVDbGllbnQ7CitjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKKworY2xh
c3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVibGljIFdlYkNvcmU6OlRpbGUgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNs
aWVudCwgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25z
dCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3Jk
aW5hdGVkVGlsZShjbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSkpOyB9
CisgICAgfkNvb3JkaW5hdGVkVGlsZSgpOworCisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7Cisg
ICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4gdXBkYXRlQmFja0J1ZmZlcigpOworICAgIHZvaWQgc3dhcEJhY2tC
dWZmZXJUb0Zyb250KCk7CisgICAgYm9vbCBpc1JlYWR5VG9QYWludCgpIGNvbnN0OworICAgIHZv
aWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworCisgICAgY29uc3QgQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29vcmRpbmF0ZTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxlKENvb3JkaW5hdGVkVGlsZUNs
aWVudCosIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOwor
CisgICAgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZSogbV90aWxlZEJhY2tpbmdTdG9yZTsKKyAgICBDb29yZGluYXRlIG1fY29v
cmRpbmF0ZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKworICAgIGludCBtX0lEOwor
ICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6
SW1hZ2VCdWZmZXI+IG1fbG9jYWxCdWZmZXI7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFRpbGVD
bGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkVGlsZUNsaWVudCgpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoaW50
IHRpbGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFz
cyBDb29yZGluYXRlZFRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmVCYWNrZW5kPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGll
bnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZFRpbGVCYWNrZW5kKGNsaWVudCkp
OyB9CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUaWxlPiBjcmVhdGVUaWxlKFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlKiwgY29uc3QgV2ViQ29yZTo6VGlsZTo6Q29vcmRpbmF0ZSYpOworICAg
IHZvaWQgcGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZFRpbGVC
YWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCopOworICAgIENvb3JkaW5hdGVkVGlsZUNsaWVu
dCogbV9jbGllbnQ7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZFRpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMzViN2Y1YzQwMzZkOGVhYWQxYTAzMzcwOGM4M2E4YjExYTVkODFhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0wLDAgKzEsNjA5IEBACisg
ICAgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUlu
Zm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQ
YWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxM
YXllclRyZWVDb29yZGluYXRvcj4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZShXZWJQYWdl
KiB3ZWJQYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0
b3Iod2ViUGFnZSkpOworfQorCitMYXllclRyZWVDb29yZGluYXRvcjo6fkxheWVyVHJlZUNvb3Jk
aW5hdG9yKCkKK3sKKyAgICAvLyBQcmV2ZW50IHNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2Ug
aXRlcmF0ZSBpdC4KKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0
ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQg
PSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCpp
dCktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKTsKK30KKworTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCisgICAg
OiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaChmYWxzZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAgICwgbV93YWl0aW5nRm9y
VUlQcm9jZXNzKHRydWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250
ZW50c1NjYWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVl
KQorICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX3Nob3VsZFN5bmNSb290
TGF5ZXIodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVDb29y
ZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCh0cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3QgbGF5ZXIuCisgICAgbV9y
b290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciht
X3Jvb3RMYXllci5nZXQoKSk7CisgICAgd2ViUm9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7
CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29y
ZGluYXRvciByb290IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3ND
b250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUo
KSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIG5vbi1jb21wb3NpdGVk
IGNvbnRlbnQiKTsKKyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhh
c1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
ZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkK
K3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGlu
Z0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1c2goKQoreworICAgIGlm
ICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9sYXllckZsdXNo
VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5l
eHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
KQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVy
KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4o
KTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1f
d2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVu
dEJhY2tncm91bmQoKSk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUg
aGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAgICBtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworCisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290TGF5ZXIgPSBudWxs
cHRyOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3Jv
bGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpCit7CisgICAgc2V0
Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludCgpCit7CisgICAgLy8gVGhpcyBpcyBu
ZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2Ug
YXJlIG5vdCB3YWl0aW5nIGZvciBhIFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCisgICAgLy8g
SW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxs
IHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVj
dXRlZC4KKyAgICBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHNjaGVk
dWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNl
bCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgorICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExh
eWVyVHJlZUhvc3RDQS4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICBmbHVzaFBlbmRp
bmdMYXllckNoYW5nZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2l6ZURp
ZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3Jv
b3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9v
dExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1NpemUgZXhwb3Nl
cyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXROZWVkc0Rpc3Bs
YXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJlYXMuCisgICAg
RmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKTsK
KyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAg
ICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0
IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhlaWdodCgpKSwg
b2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCksIDAsIG5ld1Np
emUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQorCisgICAgaWYg
KG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3QoMCwgb2xk
U2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgpIC0gb2xkU2l6
ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9w
YWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZEluc3RhbGxQYWdlT3Zl
cmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRVbmluc3RhbGxQ
YWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0
IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKyAgICBib29sIGRpZFN5bmMg
PSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnN5bmNDb21wb3Np
dGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9yb290TGF5ZXItPnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgaWYgKG1fc2hvdWxkU3lu
Y1Jvb3RMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAgICAgICBtX3Nob3Vs
ZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fc2hvdWxkU3luY0Zy
YW1lKQorICAgICAgICByZXR1cm4gZGlkU3luYzsKKworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7CisgICAg
bV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykK
K3sKKyAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKKyAgICAgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRD
aGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOwor
ICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOworICAgIH0K
KworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0
ZShpZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJD
aGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVu
KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50
MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpTeW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOwor
fQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5n
TGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6YXR0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikK
K3sKKyAgICBBU1NFUlQoIW1fcmVnaXN0ZXJlZExheWVycy5jb250YWlucyhsYXllcikpOworICAg
IG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOworCisgICAgbGF5ZXItPnNldENvbnRlbnRz
U2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxh
eWVyKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZWxldGVDb21wb3NpdGluZ0xh
eWVyKGxheWVyLT5pZCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3
cG9ydEZvclNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIC8vIFRoZXNlIGNv
bmRpdGlvbnMgbXVzdCBtYXRjaCB0aGUgY29uZGl0aW9ucyBpbiBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOworICAgIGlmICghYmFja2luZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgfHwgcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4
ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVu
ZGVyZXIoKS0+Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdy
YXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQg
dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVy
KQoreworICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOwor
CisgICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlm
IChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZp
ZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQoreworICAgIGlmICghbV93ZWJQ
YWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2ViUGFnZS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+aGFzRml4ZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxh
eWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVu
ZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAgICBBU1NFUlQocm9v
dFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisg
ICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+
Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGVyZm9ybVNj
aGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2FpdGlu
Z0ZvclVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3luY0Rpc3BsYXlTdGF0ZSgp
OworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVy
Rmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlTdGF0
ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXNseSBy
ZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVkIGJlZm9yZSB3
ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1l
KCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9N
VGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZgorCisgICAgbV93ZWJQYWdlLT5sYXlv
dXRJZk5lZWRlZCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRQZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoKSB7CisgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1fd2Vi
UGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7CisgICAgICAg
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7CisgICAgfQorfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxMYXll
clRyZWVDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIo
KQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKworICAgIG1fcGFnZU92ZXJs
YXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBwYWdl
IG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93
ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJs
YXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQ
YWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXIgPSBudWxscHRyOworfQorCitpbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9yOjph
ZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBpbnQ2NF90IGtleSA9IDA7
CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIW5hdGl2ZUltYWdlKQorICAg
ICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBrZXkgPSBuYXRpdmVJbWFnZS0+
Y2FjaGVLZXkoKTsKKyNlbmRpZgorCisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVyYXRv
ciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOworCisg
ICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpIHsK
KyAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBrZXk7CisgICAgfQorCisg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
ID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOworICAgIHsKKyAgICAgICAg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFw
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOworICAg
IH0KKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAtPmNy
ZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5LCBo
YW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChrZXks
IDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJl
bGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQg
PT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5zZWNvbmQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVtb3Zl
KGl0KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKK30KKworCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKQoreworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRzKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1f
d2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5
ZXIpIHsKKyAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBh
bmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNv
IHdlIGRvIGl0IGhlcmUuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3QoY2xpcFJl
Y3QpOworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQs
IGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworYm9vbCBMYXllclRyZWVD
b29yZGluYXRvcjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNo
b3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKK3sK
KyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVwYWlu
dENvdW50ZXIoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlVGls
ZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwg
dXBkYXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK1dl
YkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
Cit7CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNv
bnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBt
X2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0
ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAg
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5n
ZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZl
Y3Rvcik7CisKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKyAgICAg
ICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisKKyAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2Up
CisgICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgICAg
ICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+
YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAg
IG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7CisgICAgaWYgKGNv
bnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25V
cGRhdGUgPSB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJl
bmRlck5leHRGcmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRTd2Fw
QnVmZmVycygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxl
VXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAh
bV93YWl0aW5nRm9yVUlQcm9jZXNzOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpw
dXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0
ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgQVNTRVJUKCFtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7CisgICAgbV91cGRhdGVBdGxh
c2VzLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBM
YXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3MsIFNoYXJlYWJsZVN1cmZh
Y2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIE93
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBV
cGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07CisgICAgICAgIGlmIChhdGxh
cy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51
bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4KKyAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5k
bGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0g
MjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0bGFzKFNjcmF0Y2hCdWZm
ZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCku
YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDk0NmRiMDFlMDZjNGU3YjUzYjEy
YjgxZjdkNDQyNWFlNmQ2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
aApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRy
ZWVDb29yZGluYXRvcl9oCisjZGVmaW5lIExheWVyVHJlZUNvb3JkaW5hdG9yX2gKKworI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNs
aWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBMYXllclRyZWVDb29y
ZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVHJl
ZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNv
b3JkaW5hdG9yKCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVl
Q29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZzZXQpOworICAg
IHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxs
UGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFw
cGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBz
Y2hlZHVsZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSgpIHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0
b3JlKFdlYkNvcmU6OkltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZShpbnQ2NF90KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGlu
YXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3Rh
dGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVy
cyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJz
KCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1h
cDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUFuaW1hdGlvbigpIE9WRVJSSURFOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNp
dCBMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQ
YWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7CisgICAgdmly
dHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OworCisgICAgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3IK
KyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2b2lkIGRlc3Ryb3lQYWdl
T3ZlcmxheUxheWVyKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKKyAg
ICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgdm9pZCBwZXJmb3JtU2NoZWR1
bGVkTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2go
KTsKKyAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250
YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisgICAgLy8gVGhlIHBh
Z2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5
LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7
CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IG1fcmVn
aXN0ZXJlZExheWVyczsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRs
YXNlczsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7CisgICAg
Ym9vbCBtX2lzVmFsaWQ7CisKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAgICBi
b29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50
c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJvb2wgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVl
Q29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAgIGJvb2wgbV9zaG91bGRT
eW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CisgICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVl
Q29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wgbV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiOWMyYWNkZjhmODMwY2ViYzhiMTZm
YmFkMzlmZmVmNzdkYjA1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
IworCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCittZXNzYWdlcyAtPiBMYXllclRy
ZWVDb29yZGluYXRvciB7CisgICAgU2V0VmlzaWJsZUNvbnRlbnRzUmVjdChXZWJDb3JlOjpJbnRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50
IHRyYWplY3RvcnlWZWN0b3J5KQorICAgIFJlbmRlck5leHRGcmFtZSgpCisgICAgUHVyZ2VCYWNr
aW5nU3RvcmVzKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA3MWFhNjA3Y2I1ZThmNzQ4ZTJiZmUxMzY2OTE4ZjY5
Y2NlYTYxYzBkLi43NTllNjc1YWQ2NDg5ODgyYmYxN2I2MDE1NDI1MTJhYzQwOWM1OWI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaApAQCAt
OTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRp
bmdMYXllclN5bmMoKSA9IDA7CiAjZW5kaWYKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKSA9IDA7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAppbmRleCA1ZTZkNWVjMGEwN2M4ZjY2M2Q0OWQzODBhNWM3MGZkMTZhN2Q4MzZh
Li44ZWNkOWUyNTEzNjFhM2JhNTA4Mjg0NGY4YjBjMDEzZDIzYjAwMDk2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApA
QCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaXNwbGF5KFVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8pCiAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgpOwogfQogCi0jaWYgVVNF
KFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9p
ZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCAyY2ViYmQ1YzRjZjQxZDI2OTZjODk0ZjE3YzcyYjQz
MGM1OGY1ZGJjLi41NWUzZGY0ODQwMGY3MTg0NTg5YTk5YjFhOTRmODdiN2RiNzUwYjRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVy
SG9zdGluZ01vZGUodWludDMyX3QpIE9WRVJSSURFOwogI2VuZGlmCiAKLSNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVD
b29yZGluYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYmU1MTAwMGE1
ZTEyODdjOGQ3MmZmNjE5NmFlOTBjM2YwNjFkODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xh
eWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDYwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yLmgiCi0KLSNpbmNsdWRl
ICJEcmF3aW5nQXJlYUltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNs
dWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNr
aW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUGFz
c1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0
ZShXZWJQYWdlKiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVl
Q29vcmRpbmF0b3Iod2ViUGFnZSkpOwotfQotCi1MYXllclRyZWVDb29yZGluYXRvcjo6fkxheWVy
VHJlZUNvb3JkaW5hdG9yKCkKLXsKLSAgICAvLyBQcmV2ZW50IHNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdl
IGl0ZXJhdGUgaXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj4gcmVn
aXN0ZXJlZExheWVyczsKLSAgICByZWdpc3RlcmVkTGF5ZXJzLnN3YXAobV9yZWdpc3RlcmVkTGF5
ZXJzKTsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRv
ciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJlZExheWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRXZWJHcmFwaGljc0xheWVy
Q2xpZW50KDApOwotfQotCi1MYXllclRyZWVDb29yZGluYXRvcjo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3IoV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFnZSkKLSAgICAs
IG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQotICAgICwgbV9pc1ZhbGlk
KHRydWUpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1faXNTdXNw
ZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAgICAsIG1fc2hvdWxkU2Vu
ZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxz
ZSkKLSAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQotICAgICwgbV9sYXllckZsdXNo
VGltZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZCkK
LSAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUpCi17Ci0gICAgLy8gQ3Jl
YXRlIGEgcm9vdCBsYXllci4KLSAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSh0aGlzKTsKLSAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwotICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExh
eWVyKHRydWUpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5
ZXJUcmVlQ29vcmRpbmF0b3Igcm9vdCBsYXllciIpOwotI2VuZGlmCi0gICAgbV9yb290TGF5ZXIt
PnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9XZWJH
cmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgdG9XZWJHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCh0
aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Ci0j
ZW5kaWYKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0
cnVlKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQYWdl
LT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci5nZXQoKSk7Ci0KLSAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgp
KQotICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0KLSAgICBzY2hlZHVsZUxheWVy
Rmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi17Ci0gICAgaWYgKG1f
bGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVy
Rmx1c2hpbmdFbmFibGVkOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
KSB7Ci0gICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJG
bHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5
ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKLXsKLSAgICBtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaDsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdz
QmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkp
OwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KLSAg
ICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLQotICAg
IEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKLSAgICBtX2lz
VmFsaWQgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
LXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLQotICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY3JvbGxOb25Db21w
b3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNldE5vbkNvbXBvc2l0ZWRD
b250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpmb3JjZVJlcGFpbnQoKQotewotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBy
dW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGlu
ZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8vIEluc3RlYWQgd2UgYXJl
IGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUg
dGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCi0gICAgc3lu
Y0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZs
dXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBl
Y3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVIb3N0Q0Eu
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBpZiAobV9yb290TGF5ZXItPnNpemUo
KSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6
ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFzIG9m
IHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAot
ICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRT
aXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7Ci0gICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0gICAgaWYgKG5ld1NpemUu
d2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6
Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0
KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkgLSBv
bGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlmIChuZXdTaXplLmhlaWdo
dCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCks
IG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsK
LQotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQotewotICAg
IGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKQot
ewotICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKG1fcGFn
ZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKLXsKLSAg
ICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNl
dE9wYWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi1ib29sIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQotewotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1
ZGluZ1N1YmZyYW1lcygpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlM
YXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKTsKLQotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIpIHsK
LSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5pZCgpKSk7Ci0gICAgICAgIG1fc2hvdWxkU3luY1Jvb3RMYXllciA9IGZhbHNl
OwotICAgIH0KLQotICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCi0gICAgICAgIHJldHVybiBk
aWRTeW5jOwotCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3Mg
PSB0cnVlOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyU3RhdGUoV2ViTGF5
ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGlmIChtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1f
dmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNj
cm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKGlkLCBjaGlsZHJlbikp
OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKFdlYkxheWVySUQg
aWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRv
a2VuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlN5bmNDYW52YXMoaWQsIGNh
bnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKFdlYkxh
eWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRl
cnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjphdHRhY2hMYXll
cihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBBU1NFUlQoIW1fcmVnaXN0ZXJlZExh
eWVycy5jb250YWlucyhsYXllcikpOwotICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIp
OwotCi0gICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKLSAgICBs
YXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6ZGV0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgbV9yZWdpc3Rl
cmVkTGF5ZXJzLnJlbW92ZShsYXllcik7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwotfQotCi1zdGF0aWMgdm9pZCB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikK
LXsKLSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4g
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCi0g
ICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsK
LSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIGlmICghc3R5bGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgp
LT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRl
eHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOwotICAg
IGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKLX0KLQotc3RhdGljIHZv
aWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxh
eWVyKQotewotICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIp
OwotCi0gICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0gICAgICAgIHVwZGF0ZU9m
ZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOwotICAg
IGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgdXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQotewotICAgIGlmICghbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBhZ2UtPmNvcmVQYWdlKCkt
PnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fd2ViUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKS0+aGFzRml4ZWRPYmplY3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRl
ckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50
UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKLSAgICBBU1NFUlQo
cm9vdFJlbmRlckxheWVyKTsKLSAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkp
Ci0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXll
ci0+Zmlyc3RDaGlsZCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3VzcGVuZGVkIHx8IG1fd2Fp
dGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3luY0Rpc3BsYXlTdGF0
ZSgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVkdWxlZExh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0Rpc3BsYXlT
dGF0ZSgpCi17Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlvdXNs
eSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVkIGJlZm9y
ZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1Rv
RE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKLSNlbmRpZgotCi0gICAgbV93ZWJQYWdlLT5s
YXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRQZXJm
b3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1wbCo+KG1f
d2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7Ci0gICAg
ICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAgfQotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxM
YXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVybGF5TGF5
ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQotICAgIG1fcGFnZU92
ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBw
YWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUo
bV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92
ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRlc3Ry
b3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsK
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX3BhZ2VP
dmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1pbnQ2NF90IExheWVyVHJlZUNvb3JkaW5hdG9y
OjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBpbnQ2NF90IGtleSA9
IDA7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UqIG5hdGl2ZUltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAoIW5hdGl2ZUltYWdlKQot
ICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBrZXkgPSBuYXRpdmVJbWFn
ZS0+Y2FjaGVLZXkoKTsKLSNlbmRpZgotCi0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+OjppdGVy
YXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZmluZChrZXkpOwot
Ci0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkp
IHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQot
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwotICAgIHsKLSAgICAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50Ojp6ZXJvKCkpOwot
ICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBiaXRtYXAt
PmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5
LCBoYW5kbGUpKTsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmFkZChr
ZXksIDEpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsKLSAgICBpZiAoIWtleSkK
LSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQg
PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLSAgICBpZiAo
aXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0LT5zZWNvbmQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMucmVt
b3ZlKGl0KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkpKTsKLX0KLQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKLXsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKQotewotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7Ci0gICAgICAg
IG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5
TGF5ZXIpIHsKLSAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50
cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcs
IHNvIHdlIGRvIGl0IGhlcmUuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3QoY2xp
cFJlY3QpOwotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRl
eHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotYm9vbCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5n
cygpLT5zaG93RGVidWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QK
LXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5zaG93UmVw
YWludENvdW50ZXIoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRhcmdldFJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRl
VGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVj
dCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVU
aWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0K
LVdlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0
b3IpCi17Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAh
PSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRp
Y2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgot
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkp
LT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3Ip
OwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hh
bmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgICAgIG1f
Y29udGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3Jh
cGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0g
ICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9y
IGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCpp
dCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVj
dERpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGlmICht
X3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRW
aXNpYmxlQ29udGVudFJlY3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkK
LSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOwotfQotCi0j
aWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpz
Y2hlZHVsZUFuaW1hdGlvbigpCi17Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAg
ICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJzKCk7Ci19Ci0KLWJvb2wg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFja2luZ1N0b3JlcygpCi17
Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9
IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2Vi
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsK
LQotICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkp
OwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1QYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZs
YWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQm
IG9mZnNldCkKLXsKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGlj
c0NvbnRleHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ld
OwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewotICAgICAgICAgICAgLy8g
VGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3Bh
Y2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAgICAgICAgICAgaWYgKGdy
YXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJl
bGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRj
aEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRh
dGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwotICAgIHJldHVybiBtX3Vw
ZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUs
IHNpemUsIG9mZnNldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzQwNmU0NWI5MzUxZjFmNTg1ODU0YzA4YjkyNmI0NTlhYTcwNmEy
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yX2gKLSNkZWZpbmUgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JfaAotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlVwZGF0
ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFVwZGF0ZUluZm87Ci1jbGFzcyBXZWJQYWdlOwotCi1j
bGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1Ymxp
YyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxMYXllclRyZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5M
YXllclRyZWVDb29yZGluYXRvcigpOwotCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOwotICAgIHZp
cnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2hv
dWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zm
c2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFnZU92ZXJs
YXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQg
PSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
SW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQg
dGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVj
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmlydHVhbCBib29sIGxheWVyVHJl
ZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwotCi0gICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOwotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5
ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
OwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9r
ZW4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpXZWJH
cmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCk7Ci0K
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNv
bnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6Rmxh
Z3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7Ci0jaWYg
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0
aW9uKCkgT1ZFUlJJREU7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVy
VHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKLQotcHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xh
eWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5n
UGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikgY29uc3Q7Ci0KLSAgICAvLyBMYXllclRyZWVDb29yZGluYXRvcgotICAgIHZv
aWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5
TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZvaWQg
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAg
IHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFs
bCBub24tY29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVy
bGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCi0gICAg
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKLQotICAg
IEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsK
LSAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNv
dW50czsKLSAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRsYXNlczsKLQotICAgIGJv
b2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci0gICAgYm9vbCBtX2lzVmFsaWQ7
Ci0KLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKLSAgICBib29sIG1faXNTdXNwZW5k
ZWQ7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxv
YXQgbV9jb250ZW50c1NjYWxlOwotICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25V
cGRhdGU7Ci0KLSAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBi
b29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOwot
ICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29v
cmRpbmF0b3I+Kik7Ci0gICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1f
bGF5ZXJGbHVzaFRpbWVyOwotICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVz
c2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmZjZmOTZhZGI2YTUxZmI1
M2EyN2E1MTZlYzFmZTBlNWQzOGYyMGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCisrKyAvZGV2L251
bGwKQEAgLTEsMjcgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0j
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0j
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotCi0j
aWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi1tZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGlu
YXRvciB7Ci0gICAgU2V0VmlzaWJsZUNvbnRlbnRzUmVjdChXZWJDb3JlOjpJbnRSZWN0IHZpc2li
bGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHRyYWplY3Rv
cnlWZWN0b3J5KQotICAgIFJlbmRlck5leHRGcmFtZSgpCi0gICAgUHVyZ2VCYWNraW5nU3RvcmVz
KCkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNz
TGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjE2OTdmZTI1MjA0NDJl
N2FkYmE5ZTBkYjIzNDhmOGI3ZWJiMWYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1
OCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
V2ViR3JhcGhpY3NMYXllci5oIgotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0j
aW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQs
IFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJCeUlETWFwKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1h
cDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4gZ2xvYmFsTWFwOwotICAgIHJldHVybiBn
bG9iYWxNYXA7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBoaWNzTGF5ZXI6OmxheWVy
QnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCi17Ci0gICAgSGFzaE1hcDxXZWJMYXllcklELCBX
ZWJHcmFwaGljc0xheWVyKj4mIHRhYmxlID0gbGF5ZXJCeUlETWFwKCk7Ci0gICAgSGFzaE1hcDxX
ZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChp
ZCk7Ci0gICAgaWYgKGl0ID09IHRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotc3RhdGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIHJldHVybiBsYXllciA/IHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPmlkKCkgOiAwOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUxheWVyU3RhdGUoKQotewotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSB0cnVlOwot
ICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0
aGlzKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCi17
Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAg
ICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygp
Ci17Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotI2VuZGlmCi0K
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQotewot
ICAgIGlmICghdHJhbnNmb3JtKCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
Y2hpbGRyZW4oKVtpXSktPnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci0gICAgaWYgKHJl
cGxpY2FMYXllcigpKQotICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkp
LT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKLXsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0g
ICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotV2ViR3JhcGhpY3NMYXllcjo6
V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFw
aGljc0xheWVyKGNsaWVudCkKLSAgICAsIG1fbWFza1RhcmdldCgwKQotICAgICwgbV9pblVwZGF0
ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0KHRydWUpCi0gICAg
LCBtX3Nob3VsZFN5bmNMYXllclN0YXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNDaGlsZHJl
bih0cnVlKQotICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCi0gICAgLCBtX2NhbnZhc05l
ZWRzRGlzcGxheShmYWxzZSkKLSAgICAsIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCgwKQotICAg
ICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIoMCkKLXsK
LSAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7Ci0gICAgbV9pZCA9IG5leHRM
YXllcklEKys7Ci0gICAgbGF5ZXJCeUlETWFwKCkuYWRkKGlkKCksIHRoaXMpOwotfQotCi1XZWJH
cmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcigpCi17Ci0gICAgbGF5ZXJCeUlETWFwKCku
cmVtb3ZlKGlkKCkpOwotCi0gICAgaWYgKG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCkgewotICAg
ICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT5kZXRhY2hMYXllcih0aGlzKTsKLSAgICB9Ci0gICAgd2lsbEJlRGVzdHJveWVkKCk7Ci19
Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCkKLXsKLSAgICBHcmFw
aGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKLXsK
LSAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAg
IGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGNoaWxk
ID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVuW2ldKTsKLSAgICAgICAgY2hpbGQtPnNldFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICAgICAg
Y2hpbGQtPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB9Ci0gICAgZGlkQ2hhbmdlQ2hpbGRy
ZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRD
aGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGls
ZChsYXllcik7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0V2ViR3JhcGhpY3NM
YXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotICAgIHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VDaGlsZHJl
bigpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGlj
c0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNl
dFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0
b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEFi
b3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOwotICAgIHRvV2Vi
R3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFw
aGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFu
Z2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGlj
c0xheWVyKiBzaWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5
ZXIsIHNpYmxpbmcpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhp
Y3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQotewotICAgIGJvb2wg
b2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAg
ICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4o
KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIob2xkQ2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG5ld0NoaWxkKS0+c2V0V2ViR3JhcGhpY3NMYXll
ckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotICAgIHRvV2ViR3JhcGhpY3NMYXll
cihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKLXsKLSAgICBpZiAo
V2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50
KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICBHcmFw
aGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcCkKLXsKLSAgICBpZiAocG9zaXRpb24oKSA9PSBwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRy
eSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZs
b2F0UG9pbnQzRCYgcCkKLXsKLSAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwKTsKLSAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmICh0aGlzLT5zaXplKCkgPT0gc2l6ZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKLSAgICBz
ZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXll
cigpLT5zZXRTaXplKHNpemUpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0KQotewotICAgIGlmICh0cmFuc2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnko
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0o
KSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
blRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikKLXsKLSAgICBpZiAocHJlc2VydmVz
M0QoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVz
ZXJ2ZXMzRChiKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQotewotICAgIGlmIChtYXNrc1RvQm91
bmRzKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tz
VG9Cb3VuZHMoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQotewotICAgIGlmIChkcmF3c0NvbnRl
bnQoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3ND
b250ZW50KGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCi17Ci0gICAgaWYgKGNvbnRl
bnRzQXJlVmlzaWJsZSgpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1Zpc2libGUoYik7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19
Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKQotewot
ICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
bV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBv
cnRzQWxwaGEoIWIpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGIpOwot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKQotewotICAgIGlmIChiYWNrZmFjZVZpc2liaWxp
dHkoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNr
ZmFjZVZpc2liaWxpdHkoYik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAo
dGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSByKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7Ci0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzTmVl
ZHNEaXNwbGF5KCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZTsKLSAgICBz
ZXRDb250ZW50c1RvSW1hZ2UoMCk7Ci0gICAgc2V0Q29udGVudHNUb0ltYWdlKGltYWdlLmdldCgp
KTsKLSAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcikKLXsKLSAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxheWVyOwot
ICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAg
ICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKLXsKLSAgICBpZiAoZmlsdGVycygpID09IG5ld0Zp
bHRlcnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKLSAg
ICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKLX0KLSNlbmRp
ZgotCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBp
bWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsK
LSAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBpcyB0aGUgc2FtZSBmcmFt
ZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3JlYXRpbmcgdGhlIGltYWdl
LgotICAgICAgICBuZXdJRCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFnZUJh
Y2tpbmdTdG9yZShpbWFnZSk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+cmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwot
ICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlmIChtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYg
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBiZSBu
byBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotCi0g
ICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lEOwotICAgIG1faW1hZ2Ug
PSBpbWFnZTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7Ci0KLSAgICBpZiAoIWxh
eWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0U2l6ZShzaXplKCkpOwotICAg
IFdlYkdyYXBoaWNzTGF5ZXIqIHdlYkdyYXBoaWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIo
bGF5ZXIpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5zZXRNYXNr
VGFyZ2V0KHRoaXMpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0KLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBp
ZiAobGF5ZXIgPT0gcmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChs
YXllcikKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0V2ViR3JhcGhpY3NM
YXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotCi0gICAgR3JhcGhpY3NMYXll
cjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAg
IHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUo
c2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19
Ci0KLVdlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2lkOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogbWFz
ayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCi0gICAgICAgIG1hc2stPnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgaWYgKFdlYkdyYXBoaWNz
TGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQotICAg
ICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQot
ICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICBz
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgY2hpbGRyZW4oKVtp
XS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5ZXIqIHRv
V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzeW5jQ2hpbGRyZW4oKQotewotICAgIGlmICghbV9zaG91bGRTeW5jQ2hpbGRyZW4p
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNlOwotICAg
IFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURzLmFwcGVuZCh0b1dlYkxh
eWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5z
eW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKLXsKLSAgICBpZiAo
IW1fc2hvdWxkU3luY0ZpbHRlcnMpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNG
aWx0ZXJzID0gZmFsc2U7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJG
aWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRl
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOwot
ICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwotCi0g
ICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludCgpOwotICAgIG1fbGF5ZXJJ
bmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOwotICAgIG1fbGF5ZXJJ
bmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKLSAgICBtX2xheWVy
SW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7Ci0gICAgbV9sYXllckluZm8u
Y29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7Ci0gICAgbV9sYXllckluZm8uZHJhd3NDb250
ZW50ID0gZHJhd3NDb250ZW50KCk7Ci0gICAgbV9sYXllckluZm8uY29udGVudHNWaXNpYmxlID0g
Y29udGVudHNBcmVWaXNpYmxlKCk7Ci0gICAgbV9sYXllckluZm8ubWFzayA9IHRvV2ViTGF5ZXJJ
RChtYXNrTGF5ZXIoKSk7Ci0gICAgbV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1hc2tzVG9C
b3VuZHMoKTsKLSAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3BhY2l0eSgpOwotICAgIG1fbGF5
ZXJJbmZvLnBhcmVudCA9IHRvV2ViTGF5ZXJJRChwYXJlbnQoKSk7Ci0gICAgbV9sYXllckluZm8u
cG9zID0gcG9zaXRpb24oKTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZl
czNEKCk7Ci0gICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBsaWNhTGF5
ZXIoKSk7Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKLSAgICBtX2xheWVySW5mby50
cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5
bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzeW5jQ2FudmFzKCkKLXsKLSAgICBpZiAoIW1fY2FudmFzTmVlZHNEaXNwbGF5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fY2FudmFzUGxhdGZvcm1MYXllcikKLSAgICAgICAg
cmV0dXJuOwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdWludDMyX3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3Vy
ZmFjZSgpOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0NhbnZhcyhtX2lkLCBJ
bnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBncmFwaGljc1N1cmZhY2VU
b2tlbik7Ci0jZW5kaWYKLSAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBp
ZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQpCi0gICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQg
PSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUobV9pbWFn
ZS5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhh
dmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0gICAgZW5zdXJlSW1hZ2VC
YWNraW5nU3RvcmUoKTsKLSAgICBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOwotICAg
IHN5bmNDaGlsZHJlbigpOwotICAgIHN5bmNMYXllclN0YXRlKCk7Ci0jaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIHN5bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB1cGRhdGVDb250ZW50QnVm
ZmVycygpOwotICAgIHN5bmNDYW52YXMoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQotewotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKLXsKLSAgICBtX2xheWVySW5mby5pc1Jvb3RM
YXllciA9IGlzUm9vdDsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25z
dCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIGlmIChtX21haW5CYWNraW5n
U3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRl
ZCh0cmFqZWN0b3J5VmVjdG9yKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQotewotICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwot
ICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLX0KLQotZmxvYXQgV2ViR3JhcGhpY3NMYXllcjo6
ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCi17Ci0gICAgcmV0dXJuIHNob3VsZFVzZVRpbGVkQmFj
a2luZ1N0b3JlKCkgPyBtX2NvbnRlbnRzU2NhbGUgOiAxOwotfQotCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUoKQotewotICAgIGlmICghZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlIHx8IG1fbWFp
bkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmV0d2VlbiBjcmVhdGluZyB0aGUgbmV3IGJh
Y2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LAotICAgIC8vIHdlIGRvIG5vdCB3
YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGF0IG1pZ2h0IHJlc3VsdCBpbgotICAg
IC8vIGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJpbmcgYXMgdGhlIG9sZCB0aWxlcyBtYXkgYmUgZHJv
cHBlZCBiZWZvcmUKLSAgICAvLyBzb21ldGhpbmcgcmVwbGFjZXMgdGhlbS4KLSAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLQotICAgIC8v
IE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlz
aWJsZSBhcmVhcy4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVBbGxOb25WaXNp
YmxlVGlsZXMoKTsKLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgbV9tYWluQmFja2luZ1N0
b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOwotICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFxdWUoKSk7Ci0gICAgbV9tYWluQmFj
a2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7Ci19
Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoKmNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCi17
Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxs
b3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luVXBkYXRlTW9kZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmxheWVyVHJlZVRp
bGVVcGRhdGVzQWxsb3dlZCgpOwotfQotCi1JbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKLXsKLSAgICByZXR1cm4gSW50UmVjdCgwLCAwLCBz
aXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xh
eWVyOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpCi17Ci0gICAgcmV0dXJuICFzZWxmT3JB
bmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci19Ci0KLUludFJlY3QgV2ViR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCi17Ci0gICAgaWYgKCFzaG91
bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm4gdGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QoKTsKLQotICAgIC8vIE5vbi1pbnZlcnRpYmxlIGxheWVycyBhcmUgbm90
IHZpc2libGUuCi0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNJbnZlcnRp
YmxlKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAvLyBSZXR1cm4gYSBwcm9q
ZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRpbmF0ZXMpIG9udG8gdGhl
IGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KLSAgICAvLyBUaGUgcmVzdWx0aW5n
IHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVjdCBpcyB0aGUgYm91bmRp
bmcgYm94IG9mIHRoaXMgcXVhZCwKLSAgICAvLyBzbyBpdCBtaWdodCBzcHJlYWQgZnVydGhlciB0
aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBtb3JlIGFtcGxpZmllZCBi
eSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpLmNsYW1wZWRCb3VuZHNPZlBy
b2plY3RlZFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnZpc2libGVDb250ZW50c1JlY3QoKSkpKSk7Ci19Ci0KLUNvbG9yIFdlYkdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLX0K
LQotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdlYkdyYXBoaWNzTGF5ZXI6
OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFi
bGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsK
LSAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUo
c2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEsIGhhbmRsZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpjcmVhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+
Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCi17Ci0g
ICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBk
YXRlSW5mbywgdGFyZ2V0UmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3Zl
VGlsZShpbnQgdGlsZUlEKQotewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+cmVtb3Zl
VGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNv
bnRlbnRCdWZmZXJzKCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIG1f
bWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2luVXBkYXRlTW9kZSA9
IHRydWU7Ci0gICAgLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAocmUpY3JlYXRlIHRoZSBt
YWluIHRpbGVkIGJhY2tpbmcgc3RvcmUsIG9uY2Ugd2UKLSAgICAvLyBoYXZlIGEgcmVtb3RlIGNs
aWVudCBhbmQgd2UgYXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8gdGhlIFVJIHByb2Nlc3Mu
Ci0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIGNyZWF0ZUJhY2tpbmdTdG9y
ZSgpOwotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLSAgICBt
X2luVXBkYXRlTW9kZSA9IGZhbHNlOwotCi0gICAgLy8gVGhlIHByZXZpb3VzIGJhY2tpbmcgc3Rv
cmUgaXMga2VwdCBhcm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuCi0gICAgLy8gcmVt
b3ZpbmcgdGhlIGV4aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUgbmV3IG9uZXMuIFRoZSBm
aXJzdCB0aW1lCi0gICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwgcGFpbnRlZCB3ZSByZW1v
dmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUuCi0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9y
ZS0+dmlzaWJsZUFyZWFJc0NvdmVyZWQoKSkKLSAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9y
ZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0b3Jl
cygpCi17Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9wcmV2aW91c0Jh
Y2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpIHsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1hZ2VC
YWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0gICAgICAgIG1f
bGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOwotICAgIH0KLQotICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwotfQotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpXZWJHcmFwaGlj
c0xheWVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dCA9PSBjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChXZWJHcmFwaGljc0xheWVy
KiByZXBsaWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAg
cmVwbGljYS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwotICAgIGlmIChXZWJH
cmFwaGljc0xheWVyKiBtYXNrID0gdG9XZWJHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKLSAg
ICAgICAgbWFzay0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJH
cmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcih0aGlzLT5jaGlsZHJlbigp
W2ldKTsKLSAgICAgICAgbGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsK
LSAgICB9Ci0KLSAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIG9uIHRoZSBVSSBw
cm9jZXNzIGhlcmUgaWYgdGhlIHJlbW90ZSBjbGllbnQgaGFzIGNoYW5nZWQgb3IgaXMgcmVtb3Zl
ZC4KLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIHB1cmdlQmFj
a2luZ1N0b3JlcygpOwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmRldGFjaExh
eWVyKHRoaXMpOwotICAgIH0KLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQgPSBjbGllbnQ7
Ci0gICAgaWYgKGNsaWVudCkKLSAgICAgICAgY2xpZW50LT5hdHRhY2hMYXllcih0aGlzKTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVjdCgpCi17Ci0gICAgaWYg
KG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5jb3Zlcldp
dGhUaWxlc0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRy
YW5zZm9ybWVkVmlzaWJsZVJlY3QoKQotewotICAgIGlmICghbV9zaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSBm
YWxzZTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybSgp
KTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7Ci0gICAgbV9sYXll
clRyYW5zZm9ybS5zZXRTaXplKHNpemUoKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRGbGF0
dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldENoaWxkcmVu
VHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uY29t
YmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b1dlYkdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5t
X2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpOwotCi0gICAgLy8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJlIHVzZWQgaW4g
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdC4KLSAgICBhZGp1c3RWaXNpYmxlUmVjdCgpOwot
ICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLX0KLQotc3RhdGljIFBhc3NPd25QdHI8R3JhcGhp
Y3NMYXllcj4gY3JlYXRlV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJHcmFwaGljc0xheWVyKGNsaWVudCkp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKLXsKLSAgICBHcmFw
aGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShjcmVhdGVXZWJHcmFwaGljc0xheWVy
KTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZp
bmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5p
c0FmZmluZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxOWQwNjc1MDQxZDA0NjFjNGM3
NTVkNGE3NzU5MjM4NGFhMTYxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAg
QEAKLSAgICAvKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVm
IFdlYkdyYXBoaWNzTGF5ZXJfaAotI2RlZmluZSBXZWJHcmFwaGljc0xheWVyX2gKLQotI2luY2x1
ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRl
ICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCi0jaW5jbHVkZSAiVGls
ZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgot
I2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldl
YkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYg
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBXZWJH
cmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViR3JhcGhp
Y3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdl
YkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5n
U3RvcmUoaW50NjRfdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJM
YXllcklELCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsK
LSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRl
cnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNl
bmRpZgotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBo
aWNzU3VyZmFjZVRva2VuKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5
ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwg
V2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgot
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAot
ICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViR3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+V2ViR3JhcGhpY3NMYXllcigpOwotCi0gICAg
Ly8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmguCi0gICAgYm9vbCBzZXRD
aGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7Ci0gICAgdm9pZCBhZGRDaGls
ZChHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXll
ciosIGludCk7Ci0gICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGlj
c0xheWVyKik7Ci0gICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICB2b2lkIHNldFBvc2l0
aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZs
b2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2
b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAgIHZvaWQg
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2
b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwotICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29s
KTsKLSAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKLSAgICB2b2lkIHNldENvbnRlbnRz
VmlzaWJsZShib29sKTsKLSAgICB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOwotICAgIHZv
aWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOwotICAgIHZvaWQgc2V0T3BhY2l0eShmbG9h
dCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQg
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0gICAgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFz
KFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7
Ci0gICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7Ci0gICAg
dm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50
UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7
Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwotCi0gICAgV2ViS2l0OjpX
ZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgc3RhdGljIFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVy
QnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwotICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKLSAg
ICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9Ci0KLSAgICBib29sIGZp
eGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0gICAg
dm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0
ID0gaXNGaXhlZDsgfQotCi0gICAgR3JhcGhpY3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza1RhcmdldDsgfQotICAgIHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xh
eWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQotCi0gICAgc3RhdGljIHZvaWQg
aW5pdEZhY3RvcnkoKTsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwotICAgIHZpcnR1YWwgdm9p
ZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0
b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKLSAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5n
U3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJh
Y2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0KCk7Ci0gICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9y
ZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29u
c3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwotCi0gICAgdm9pZCBzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2Vi
R3JhcGhpY3NMYXllckNsaWVudCopOwotICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7Ci0gICAgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZSgpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHN5
bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHN5bmNDYW52YXMoKTsKLSAgICB2b2lkIGVu
c3VyZUltYWdlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICB2b2lkIGFkanVzdFZpc2libGVSZWN0KCk7
Ci0gICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKLSAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQot
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7Ci0gICAgV2ViS2l0
OjpXZWJMYXllcklEIG1faWQ7Ci0gICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllckluZm87
Ci0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwotICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFza1Rh
cmdldDsKLSAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OwotICAgIEdyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKLSAgICBib29sIG1faW5VcGRhdGVNb2RlIDog
MTsKLSAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7Ci0gICAgYm9vbCBtX3No
b3VsZFN5bmNMYXllclN0YXRlOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7
Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOwotICAgIGJvb2wgbV9maXhlZFRvVmll
d3BvcnQgOiAxOwotICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOwotCi0gICAgdm9p
ZCBub3RpZnlDaGFuZ2UoKTsKLSAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci0gICAgdm9p
ZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJlbigpOwot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKLSNl
bmRpZgotCi0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIGJvb2wgc2VsZk9y
QW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotICAgIGJvb2wgc2hvdWxkVXNlVGls
ZWRCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLSAgICB2
b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJQ
YXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotICAg
IGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKLQotICAgIFdlYktpdDo6V2ViR3JhcGhp
Y3NMYXllckNsaWVudCogbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50OwotICAgIE93blB0cjxXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOwotICAgIE93blB0cjxX
ZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKLSAgICBm
bG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0gICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9y
bUxheWVyOwotfTsKLQotV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFwaGljc0xheWVyKEdyYXBo
aWNzTGF5ZXIqKTsKLQotfQotI2VuZGlmCi0KLSNlbmRpZiAvLyBXZWJHcmFwaGljc0xheWVyX0gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5o
CmluZGV4IDEzNzJmMmEyOTY0OGIzZjEwMTBlYzEzN2IyNDQ5NmFlOGY2ZDYxNzYuLjljMmU3NDRm
NGRmZDMxYjE5NzA4ZDEyZWIxNGYzNTk5NzVhMmJiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtODUsNyArODUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJ
TkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9CkBAIC0xMDUs
NyArMTA1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NEZXZpY2VB
ZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAjZW5k
aWYKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAjZW5k
aWYKIApAQCAtMTE0LDcgKzExNCw3IEBAIHByb3RlY3RlZDoKIAogICAgIFdlYlBhZ2UqIG1fd2Vi
UGFnZTsKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKICAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKICNlbmRpZgogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDIxMjU2MDBiMTQ3MTI4NTFlOTM0OWJjZGQ1ODU4YjY3Y2JlMDZjMWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgot
Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJ
bmZvLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1UaWxlZEJhY2tpbmdTdG9y
ZVJlbW90ZVRpbGU6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZShUaWxlZEJhY2tpbmdTdG9y
ZVJlbW90ZVRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2lu
Z1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLSAgICA6IG1fY2xpZW50
KGNsaWVudCkKLSAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCi0g
ICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCi0gICAgLCBtX3JlY3QodGlsZWRCYWNr
aW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCi0gICAgLCBt
X0lEKDApCi0gICAgLCBtX2RpcnR5UmVjdChtX3JlY3QpCi17Ci19Ci0KLVRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZTo6flRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSgpCi17Ci0gICAgaWYg
KG1fSUQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQpOwotfQotCi1ib29sIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBJbnRS
ZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOwotICAg
IGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9k
aXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Ci19Ci0KLVZlY3RvcjxJbnRSZWN0PiBUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQotewotICAgIGlmICgh
aXNEaXJ0eSgpKQotICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci0KLSAgICBTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Qu
c2l6ZSgpLCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNl
dCk7Ci0gICAgaWYgKCFncmFwaGljc0NvbnRleHQpCi0gICAgICAgIHJldHVybiBWZWN0b3I8SW50
UmVjdD4oKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgp
LCAtbV9kaXJ0eVJlY3QueSgpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3Rv
cmUtPmNvbnRlbnRzU2NhbGUoKSkpOwotICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgp
LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJh
Y2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOwotCi0gICAgdXBkYXRlSW5m
by51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1v
dmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKLSAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9y
ID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOwotICAgIGdyYXBoaWNzQ29u
dGV4dC5yZWxlYXNlKCk7Ci0KLSAgICBzdGF0aWMgaW50IGlkID0gMDsKLSAgICBpZiAoIW1fSUQp
IHsKLSAgICAgICAgbV9JRCA9ICsraWQ7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1f
SUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT51
cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0KLSAgICBtX2RpcnR5UmVjdCA9
IEludFJlY3QoKTsKLSAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci19Ci0KLXZvaWQgVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQotewotICAg
IC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KLX0KLQotYm9vbCBUaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gISFtX0lEOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0b3JlUmVtb3Rl
VGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV9yZWN0ID0gSW50
UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBtX3Jl
Y3Q7Ci19Ci0KLVRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OlRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50
KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0KLVBhc3NSZWZQdHI8V2Vi
Q29yZTo6VGlsZT4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZDo6Y3JlYXRlVGls
ZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IFdl
YkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQotewotICAgIHJldHVybiBU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmNyZWF0ZShtX2NsaWVudCwgdGlsZWRCYWNraW5n
U3RvcmUsIHRpbGVDb29yZGluYXRlKTsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZTExZTliYjc3
YWQxNDQ0NzlhNGFhMmFiODJmNGM4YWE5MjA5ZjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Rp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlX2gKLSNkZWZpbmUgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlX2gKLQotI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5o
IgotI2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2lu
Y2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50OwotY2xhc3Mg
U3VyZmFjZVVwZGF0ZUluZm87Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZSA6
IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
aWxlPiBjcmVhdGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQsIFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRp
bmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUoY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUp
KTsgfQotICAgIH5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKTsKLQotICAgIGJvb2wgaXNE
aXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsKLSAg
ICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQo
KSBjb25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUo
KSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgdm9pZCByZXNpemUoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZShUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqLCBXZWJDb3JlOjpU
aWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKLQotICAgIFRpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViQ29yZTo6VGlsZWRCYWNr
aW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7Ci0gICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5h
dGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7Ci0KLSAgICBpbnQgbV9JRDsKLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OwotCi0gICAgT3duUHRyPFdlYkNvcmU6OkltYWdl
QnVmZmVyPiBtX2xvY2FsQnVmZmVyOwotfTsKLQotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5UaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGVDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFj
ZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwotfTsKLQotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZCA6
IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4gY3Jl
YXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZChjbGllbnQpKTsg
fQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKLSAgICB2
b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQmFja2VuZChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqKTsKLSAg
ICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIG1fY2xpZW50OwotfTsKLQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQotCi0jZW5kaWYgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAppbmRleCAwYWNkMzQ4
NmMyOTAxNDIwN2U3ZTRiYjhkOGIwYTBmZTY4ZDlkMzI2Li41ODg2OWYzOTk3NjgwMzAwMWIwM2Fl
YTkwNWExMWQ2ODIxYjNkYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaAppbmRleCA3NDc2MGE1YjQ5ZDQ1OGZhMTg4
NWMzZjYwYjg3ZTdmMjMwNTczMzI5Li43ZDIyMjM3NjliMTJiM2YwZDdkMjk0YmMyNmY3NThkYjM5
Y2FjMDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBk
YXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRl
QXRsYXMuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5o
IgogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xh
c3MgSW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2Vi
UHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nl
c3NNYWluUXQuY3BwCmluZGV4IGNiNzJjYjliZTZlOTJlMmIzZWY4YTM3MTc2Y2NkZThkYmUxZTYx
ZmYuLjI4YjIwMGQxM2YyMjExY2ZmZWRmNTM0MzlhYzBhNWRhNzBkMDBkMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtMzgs
NyArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgorI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCiAjaWYgVVNFKFFUS0lUKQog
I2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFjZS5oIgpAQCAtMTgxLDcgKzE4MSw3IEBAIFFfREVD
TF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0aW9uKiBhcHApCiAgICAg
fQogI2VuZGlmCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIFdlYkdyYXBo
aWNzTGF5ZXI6OmluaXRGYWN0b3J5KCk7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpp
bml0RmFjdG9yeSgpOwogI2VuZGlmCiAKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6OnNoYXJlZCgp
LmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156481</attachid>
            <date>2012-08-03 16:46:38 -0700</date>
            <delta_ts>2012-08-03 17:06:03 -0700</delta_ts>
            <desc>Fixed CMakeLists.txt alphabetical order</desc>
            <filename>bug-93164-20120803164516.patch</filename>
            <type>text/plain</type>
            <size>269128</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAxMTNlYjFjNjQ2MTYwNjdmZDAwZjhj
NTQ2MGVlNTlmMjY4Y2E3M2IuLjg0ZWJhYjM5M2MwMTY5MGEyMzA1YjRlZmU3YzJmNDEyNTM3Yzlm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDgtMDMgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFVJX1NJREVfQ09NUE9TSVRJ
TkcgY29kZSBoYXMgY29uZnVzaW5nIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgVUlfU0lERV9DT01QT1NJVElORyB0byBDT09SRElO
QVRFRF9HUkFQSElDUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEyLTA4LTAz
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTdHJp
bmdJbXBsIGNyZWF0ZWQgZnJvbSBsaXRlcmFsIHNob3VsZCBiZSBCdWZmZXJJbnRlcm5hbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDkzMWU2OWIwOWE4ZWM1ZjFjNzM5OGY2MmFjNTZkMDdlYjhjOWU4ODkuLjgzN2Ez
NmNiNTNiZTk3ZjgxNDA5OWY2MGQ1ZTIxYjMzYjQ2NzExZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NSBAQAorMjAxMi0wOC0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFtRdF0gVUlfU0lERV9DT01QT1NJVElORyBjb2RlIGhhcyBjb25m
dXNpbmcgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzMTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lZCBhbmQgY29uc29saWRhdGVkIGNvZGUgZ3VhcmRlZCB1bmRlciBVSV9TSURFX0NP
TVBPU0lUSU5HLCBub3cgdW5kZXIKKyAgICAgICAgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSBn
dWFyZCBhbmQgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xkZXJzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAo
UVJhd1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAg
IChEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDb250ZW50c1NHTm9kZTo6Q29udGVudHNTR05vZGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZW50c1NHTm9kZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoQ29udGVudHNT
R05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoUXRXZWJQYWdlU0dOb2RlKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVBbmltYXRpb24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGls
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2luZ0FyZWFJbXBs
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAg
ICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMi0wOC0wMyAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGhpbmcgaGFwcGVucyB3aGVuIGNsaWNr
aW5nIG9uIHRoZSB1bmF2YWlsYWJsZSBwbHVnLWluIGJ1dHRvbiBmb3IgYSBibG9ja2VkIHBsdWct
aW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IDUwNzEwYjEzODMwODgxM2YyNDI4MzliYWFhYzU0MzY4YzAzNjdi
MDkuLmI3MzgzYjIyZWIzZjc5ZTllNGMzMjg4YmRiZGZhNTMxYWQ0YzM4MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAogLyogQ29tcG9zaXRpbmcgb24gdGhlIFVJLXByb2Nl
c3MgaW4gV2ViS2l0MiAqLwogI2lmIFBMQVRGT1JNKFFUKQotI2RlZmluZSBXVEZfVVNFX1VJX1NJ
REVfQ09NUE9TSVRJTkcgMQorI2RlZmluZSBXVEZfVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIDEK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IGE5NWViYTExOWRkMzQ1MGUwNDExYjgzNGUzZDljZmNjYjk4MTY4MjguLmUy
YmQyMTgxMTNhNzkzZGQzOTFlM2I3ZGU0MTE2ZTZiZTJhMzI3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjEsNyArMjIxLDcgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vz
cy9GaW5kSW5kaWNhdG9yLmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCisKICAgICBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAKICAgICBVSVBy
b2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBTRVQoV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKICAgICBVSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3Rv
cmFnZU1hbmFnZXJQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCisKICAgICBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9u
RGF0YS5jcHAKQEAgLTMyMyw2ICszMjMsOSBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwCiAgICAgVUlQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisgICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisgICAgCiAgICAg
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAogCiAgICAgVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC00NTQsMTEgKzQ1NywxMCBA
QCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFw
dGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAorCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250
cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC00NjcsNiArNDY5LDkgQEAgU0VUKFdlYktp
dDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVW5kb1N0ZXAuY3BwCisKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKICkKIAogU0VUKFdlYktpdDJfTUVTU0FH
RVNfSU5fRklMRVMKQEAgLTQ3Nyw3ICs0ODIsNiBAQCBTRVQoV2ViS2l0Ml9NRVNTQUdFU19JTl9G
SUxFUwogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2Vz
LmluCiAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgotICAgIFVJ
UHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9j
ZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViQmF0dGVyeU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9X
ZWJDb250ZXh0Lm1lc3NhZ2VzLmluCkBAIC00OTUsNiArNDk5LDkgQEAgU0VUKFdlYktpdDJfTUVT
U0FHRVNfSU5fRklMRVMKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJWaWJyYXRpb25Qcm94eS5tZXNzYWdlcy5p
bgogCisKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCisgICAgCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTUzNCw5ICs1NDEsMTAgQEAg
U0VUKFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3Bh
dGNoZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKworICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCiApCiAKIFNFVChXZWJQcm9j
ZXNzX0VYRUNVVEFCTEVfTkFNRSBXZWJQcm9jZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJp
CmluZGV4IDQyZmE2NjU3YTJjYTc4MjEzMzU0NzU3ZjljZmQ4OGMxNDhhMTA4ZDQuLjI2Y2JiMmI4
NTZlZTk1MWRhYjJhNzljNTMwYzk1YWU3NjkxMDA5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5wcmkKQEAgLTUxLDggKzUxLDEwIEBAIFZQQVRIID0gXAogICAgIFdlYlByb2Nlc3MvUmVzb3Vy
Y2VDYWNoZSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBc
CiAgICAgV2ViUHJvY2VzcyBcCiAgICAgVUlQcm9jZXNzIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcyBcCiAgICAgVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgVUlQcm9jZXNz
L05vdGlmaWNhdGlvbnMgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zIFwKQEAgLTkzLDEwICs5NSwx
MCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJOb3RpZmljYXRpb25NYW5hZ2VyLm1l
c3NhZ2VzLmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9M
YXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9XZWJJbnNwZWN0
b3IubWVzc2FnZXMuaW4gXAotICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCisgICAg
RHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3Nh
Z2VzLmluIFwKKyAgICBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UubWVz
c2FnZXMuaW4gXAogICAgIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRl
eCA5YjA0NDhhZThhNzZlZGEzZjlmZWZlZmEzZGVjYTI1N2M4NzE0ZTNmLi45OTU2M2Y0ZTdlZTBk
MzQ2ZTBhMDMzYjgzZDUzNmNiNjNhYmZjZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNo
Lmg+CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UG9pbnQzRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRy
aXguaD4KQEAgLTY1Miw3ICs2NTIsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46OmRlY29k
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEtVUkwmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKIHZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkK
IHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVy
LCBmbG9hdFBvaW50M0QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCmluZGV4IGRiMmI4Zjc0MWVjMmEzMWFjYmRjMTI3YzQxNzFmOWNiMzdkNDU5YWMu
LmI3Njc4YzUyNTQ5Y2MyNWRjOWEzMGM3MGU4ODBhODE4OWViYTMyYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTg2LDcgKzg2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogfQogI2VuZGlmCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgRU5BQkxFKENTU19GSUxURVJTKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpLVVJMPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OktVUkwmKTsKIH07CiAKLSNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewogICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
M0QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6
RmxvYXRQb2ludDNEJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5
ZXJUcmVlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHAKaW5kZXggZmZkZWE1MjJiMzlkMjZjNGY3YTUxMTg5MWU1ZGVjYjg3MDhkNDRjZC4uZTA4MzY0
MDA2OTg1ZDBiZGE1ZDFhNjFlNDM5YmQ4OTE4MTgxODRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcApAQCAtMTksNyArMTksNyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogCiAjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5m
by5oCmluZGV4IGQ1ZDcyMzM5MTFlMGQyZGNiMmRkZTYxMzNiZjUzNmQ0NThhOTJmNjQuLmRmNDQ3
NzhhOGQ2YmJhZGI4MDgwMGUwOWRjNTEzY2VhMzEyYjE0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBXZWJMYXll
clRyZWVJbmZvX2gKICNkZWZpbmUgV2ViTGF5ZXJUcmVlSW5mb19oCiAKLSNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNpbmNsdWRl
ICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCmluZGV4IGVkZWE5YzU5MTE2MTU3ZTk4YThkMjdkNjU5MDM5MmQzYThlODdjNjguLmIxNGFk
ZDc0NzBlNzQ3YTQ4Yzg2YmFmY2ZlM2ZkYTFhYWY0NDQ3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjE1
LDYgKzIxNSw5IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9X
ZWJQcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5oIFwKICAg
ICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCisgICAgVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCisgICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKKyAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIFwKICAg
ICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCBcCiAgICAgVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaCBcCkBAIC0yMjMs
NyArMjI2LDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5j
aGVyLmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIFwKLSAgICBV
SVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIFwKICAgICBVSVByb2Nl
c3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uaCBcCkBA
IC0yNjgsNyArMjcwLDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYkljb25EYXRh
YmFzZUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaCBcCiAgICAg
VUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5oIFwKLSAgICBVSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVu
dC5oIFwKICAgICBVSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oIFwKICAgICBV
SVByb2Nlc3MvV2ViTmF2aWdhdGlvbkRhdGEuaCBcCkBAIC0zMDQsNyArMzA1LDYgQEAgSEVBREVS
UyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oIFwKICAgICBV
SVByb2Nlc3MvcXQvV2ViR2VvbG9jYXRpb25Qcm92aWRlclF0LmggXAogICAgIFVJUHJvY2Vzcy9x
dC9XZWJQb3B1cE1lbnVQcm94eVF0LmggXAotICAgIFVJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNr
aW5nU3RvcmUuaCBcCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyLmggXAogICAgIFdlYlByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVu
dGljYXRpb25NYW5hZ2VyLmggXAogICAgIFdlYlByb2Nlc3MvQmF0dGVyeS9XZWJCYXR0ZXJ5TWFu
YWdlci5oIFwKQEAgLTM4NSw4ICszODUsOSBAQCBIRUFERVJTICs9IFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVu
dERpc3BhdGNoZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmgg
XAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVD
b29yZGluYXRvci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IvV2ViR3JhcGhpY3NMYXllci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvVXBkYXRlQXRsYXMuaCBcCkBAIC01ODUsNiArNTg2LDkgQEAgU09VUkNFUyArPSBcCiAgICAg
VUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQmFja2luZ1N0b3Jl
UXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93
bmxvYWRQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBcCkBAIC01OTYsNyArNjAwLDYg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNw
cCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwIFwKLSAgICBVSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uY3Bw
IFwKQEAgLTYzOSw3ICs2NDIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNw
cCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5jcHAgXAot
ICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9X
ZWJMb2FkZXJDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQ
cm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5jcHAgXApAQCAtNjgy
LDcgKzY4NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQ
cm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlByZWZlcmVuY2VzUXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwIFwKLSAgICBVSVByb2Nl
c3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNh
dGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBcCiAgICAgV2ViUHJvY2Vz
cy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL0JhdHRlcnkvV2ViQmF0dGVyeU1hbmFnZXIuY3BwIFwKQEAgLTc4MSwxMiArNzgyLDEyIEBA
IFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIFwKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwIFwKLSAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5j
cHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IDk5YzVmZmI0
MDUyNTg1ZjU4MzU4ZWRlZjA5OWJkN2RiODgwNjQyYjMuLjc5MTFmMTY3Yzk3NmZhYThiYzU0YWI3
NDNmYjEwMjU1OTE3M2ExOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtMjIsMTAgKzIyLDEwIEBACiAjaW5jbHVkZSAicXF1
aWNrd2VicGFnZV9wLmgiCiAKICNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgi
CisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUuaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIK
ICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKQEAgLTgyLDcgKzgyLDcgQEAgUVNHTm9kZSog
UVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBh
aW50Tm9kZURhdGEqKQogICAgICAgICByZXR1cm4gb2xkTm9kZTsKIAogICAgIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSBkLT53ZWJQYWdlUHJv
eHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBXZWJM
YXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5s
YXllclRyZWVSZW5kZXJlcigpOworICAgIExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiAKICAgICBRdFdl
YlBhZ2VTR05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxRdFdlYlBhZ2VTR05vZGUqPihvbGROb2Rl
KTsKICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKaW5kZXggMTIxZjkwZDg4OWYzZDJmMjg2YWYwOGEwYjkw
ZjFiZDRmYmZlYWE1Ny4uMGFlZDVkOTQ4NjgzMDBmYWFhNGY1MzdlMjkxNGUyZGUzMjUyODkxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2
aWV3LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzEsNyArMzIsNiBAQAogI2luY2x1ZGUgIk5hdGl2
ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVk
ZSAicXJhd3dlYnZpZXdfcF9wLmgiCkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBRUmF3V2ViVmll
dzo6cGFpbnQoY29uc3QgUU1hdHJpeDR4NCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCB1bnNp
Z25lZCBwYWkKICAgICBpZiAoIWNvb3JkaW5hdG9yUHJveHkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gY29vcmRpbmF0b3JQ
cm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVy
KiByZW5kZXJlciA9IGNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODRmNmViZDJmMTY1OGU2OTk2NWU0
NzFiYTM2MjVhOTIyODlmYWE3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApA
QCAtMCwwICsxLDE2MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5o
IgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0UmVjdChtX3RhcmdldFJlY3QpOworICAgIHRhcmdldFJlY3Quc2NhbGUoMS4g
LyBtX3NjYWxlKTsKKyAgICBib29sIHNob3VsZFJlc2V0ID0gZmFsc2U7CisgICAgaWYgKHRhcmdl
dFJlY3QgIT0gcmVjdCgpKSB7CisgICAgICAgIHNldFJlY3QodGFyZ2V0UmVjdCk7CisgICAgICAg
IHNob3VsZFJlc2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRl
eHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgIHRl
eHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIHNldFRleHR1
cmUodGV4dHVyZS5nZXQoKSk7CisgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRleHR1cmUtPnJlc2V0KG1fdGFyZ2V0UmVj
dC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKKworICAgIG1fc3VyZmFj
ZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7
CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBj
b25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7
CisgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBtX3N1cmZhY2VPZmZzZXQgPSBv
ZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpjcmVhdGVUaWxlKGludCBpZCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV90aWxl
cy5hZGQoaWQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShzY2FsZSkpOworICAgIG1fc2Nh
bGUgPSBzY2FsZTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlVGls
ZShpbnQgaWQpCit7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFwcGVuZChpZCk7Cit9CisKKwordm9p
ZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQgaWQsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAg
ICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKKyAg
ICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOworICAgIGl0LT5zZWNvbmQuc2V0
QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwor
fQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0
ZXh0dXJlKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxC
aXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlKCk7CisgICAgICAgIGlm
ICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfQorCisgICAgcmV0
dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxk
U2hvd1RpbGVEZWJ1Z1Zpc3VhbHMoKQoreworI2lmIFBMQVRGT1JNKFFUKQorICAgIHJldHVybiAo
cWdldGVudigiUVRfV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdfVklTVUFMUyIpID09ICIx
Iik7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAg
ICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7CisKKyAgICAvLyBXZSBo
YXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBo
YXMgY2hhbmdlZC4KKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
Pjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBGbG9hdFJlY3QgY292ZXJlZFJl
Y3Q7CisgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAoIXRpbGUudGV4dHVyZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7CisgICAgICAgICAgICB0aWxlc1RvUGFpbnQu
YXBwZW5kKCZ0aWxlKTsKKyAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBz
aG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBl
ZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KKyAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlvdXMt
c2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVu
dC1zY2FsZSB0aWxlLgorICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJlY3Qu
aW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICB0aWxlc1RvUGFpbnQucHJlcGVuZCgmdGlsZSk7CisgICAgfQorCisgICAgLy8gVE9ETzogV2hl
biB0aGUgVGV4dHVyZU1hcHBlciBtYWtlcyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gc29tZSBlZGdl
cyBleHBvc2VkIGFuZCBubyBlZGdlcworICAgIC8vIGV4cG9zZWQsIHRoZSB2YWx1ZSBwYXNzZWQg
c2hvdWxkIGJlIGFuIGFjY3VyYXRlIHJlZmxlY3Rpb24gb2YgdGhlIHRpbGUgc3Vic2V0IHRoYXQg
d2UgYXJlCisgICAgLy8gcGFzc2luZy4gRm9yIG5vdyB3ZSBqdXN0ICJlc3RpbWF0ZSIgc2luY2Ug
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgZG9lc24ndCBrZWVwIGluZm9ybWF0aW9uIGFib3V0Cisg
ICAgLy8gdGhlIHRvdGFsIHRpbGVkIHN1cmZhY2UgcmVjdCBhdCB0aGUgbW9tZW50LgorICAgIHVu
c2lnbmVkIGVkZ2VzRXhwb3NlZCA9IG1fdGlsZXMuc2l6ZSgpID4gMSA/IFRleHR1cmVNYXBwZXI6
Ok5vRWRnZXMgOiBUZXh0dXJlTWFwcGVyOjpBbGxFZGdlczsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpbGVzVG9QYWludC5zaXplKCk7ICsraSkgeworICAgICAgICBUZXh0dXJlTWFwcGVy
VGlsZSogdGlsZSA9IHRpbGVzVG9QYWludFtpXTsKKyAgICAgICAgdGlsZS0+cGFpbnQodGV4dHVy
ZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCBlZGdlc0V4cG9zZWQpOworICAgICAg
ICBzdGF0aWMgYm9vbCBzaG91bGREZWJ1ZyA9IHNob3VsZFNob3dUaWxlRGVidWdWaXN1YWxzKCk7
CisgICAgICAgIGlmICghc2hvdWxkRGVidWcpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3Qm9yZGVyKENvbG9yKDB4RkYsIDAsIDApLCAyLCB0aWxl
LT5yZWN0KCksIHRyYW5zZm9ybSk7CisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdSZXBhaW50
Q291bnRlcihzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUqPih0aWxlKS0+
cmVwYWludENvdW50KCksIDgsIHRpbGVzVG9QYWludFtpXS0+cmVjdCgpLmxvY2F0aW9uKCksIHRy
YW5zZm9ybSk7CisgICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21t
aXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIFZl
Y3RvcjxpbnQ+OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5kID0gbV90aWxlc1RvUmVtb3ZlLmVu
ZCgpOworICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1RvUmVtb3Zl
LmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1vdmVFbmQ7ICsraXQpCisgICAgICAgIG1fdGlsZXMu
cmVtb3ZlKCppdCk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyAgICBIYXNoTWFw
PGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBt
X3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzN2ZlYmE3MGFjOGJlZWNiMmQwMzY0OTVm
YmRmYzRmMzRmZmI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVh
YmxlU3VyZmFjZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAgICBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQorICAgICAgICA6IFRleHR1cmVNYXBwZXJU
aWxlKFdlYkNvcmU6OkZsb2F0UmVjdCgpKQorICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCisgICAg
ICAgICwgbV9yZXBhaW50Q291bnQoMCkKKyAgICB7CisgICAgfQorCisgICAgaW5saW5lIGZsb2F0
IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIGlubGluZSB2b2lkIGluY3Jl
bWVudFJlcGFpbnRDb3VudCgpIHsgKyttX3JlcGFpbnRDb3VudDsgfQorICAgIGlubGluZSBpbnQg
cmVwYWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Q291bnQ7IH0KKyAgICB2b2lk
IHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lkIHNldEJhY2tC
dWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNl
OworICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OworICAgIFdlYkNvcmU6OkludFJl
Y3QgbV90YXJnZXRSZWN0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1fc3VyZmFjZU9mZnNldDsK
KyAgICBmbG9hdCBtX3NjYWxlOworICAgIGludCBtX3JlcGFpbnRDb3VudDsKK307CisKK2NsYXNz
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHZvaWQgY3JlYXRlVGlsZShpbnQsIGZsb2F0KTsK
KyAgICB2b2lkIHJlbW92ZVRpbGUoaW50KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSk7IH0KKyAgICB2b2lkIGNvbW1pdFRp
bGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciosIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQsIFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZSgpCisgICAgICAgIDogbV9zY2FsZSgxLikKKyAgICB7IH0KKyAgICBIYXNo
TWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBtX3RpbGVzOworICAgIFZlY3Rv
cjxpbnQ+IG1fdGlsZXNUb1JlbW92ZTsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWIwYTVhMzk1NWViMTVmYmVkNjBkMzlmNjc5OTRmOWNjMDRmMmY4MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorCisj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxheWVy
VHJlZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KERyYXdpbmdBcmVhUHJv
eHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0Fy
ZWFQcm94eSkKKyAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyVHJlZVJlbmRlcmVy
KHRoaXMpKSkKKyAgICAsIG1fbGFzdFNlbnRTY2FsZSgwKQoreworfQorCitMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Ojp+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpCit7CisgICAgbV9yZW5k
ZXJlci0+ZGV0YWNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBk
YXRlVmlld3BvcnQoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQo
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaXNwYXRjaFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBtX3JlbmRlcmVyLT5hcHBl
bmRVcGRhdGUoZnVuY3Rpb24pOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRl
VGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxl
RmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0
UmVjdCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQoreworICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOworI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIGludCB0b2tlbiA9IHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZS5n
cmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIGlmICh0b2tlbikgeworICAgICAgICBIYXNoTWFw
PHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRlcmF0b3IgaXQgPSBtX3N1
cmZhY2VzLmZpbmQodG9rZW4pOworICAgICAgICBpZiAoaXQgPT0gbV9zdXJmYWNlcy5lbmQoKSkg
eworICAgICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJ
bmZvLnN1cmZhY2VIYW5kbGUpOworICAgICAgICAgICAgbV9zdXJmYWNlcy5hZGQodG9rZW4sIHN1
cmZhY2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN1cmZhY2UgPSBpdC0+c2Vjb25k
OworICAgIH0gZWxzZQorICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRl
KHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CisjZWxzZQorICAgIHN1cmZhY2UgPSBTaGFyZWFi
bGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyNlbmRpZgorICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3Jl
bmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBk
YXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3VyZmFjZSwgdXBkYXRlSW5m
by5zdXJmYWNlT2Zmc2V0KSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSwgbV9yZW5kZXJl
ci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQoreworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllciwgbV9yZW5k
ZXJlci5nZXQoKSwgaWQpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQg
aWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJv
b3RMYXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXll
clN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKK3sKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIGluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3Qg
VmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZHJlbikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIGNoaWxkcmVuKSk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVy
SUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycywgbV9yZW5kZXJl
ci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMsIG1fcmVuZGVyZXIuZ2V0KCkp
KTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2Us
IG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95
SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6
ZSkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29u
dGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUpKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpCit7CisgICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBhZGp1c3Qgdmlld3BvcnQt
Zml4ZWQgbGF5ZXJzLgorICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgpLCByZWN0KSk7CisKKyAg
ICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUg
dGhhdCBpdHMgc2l6ZSBzdGF5cyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZl
IG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgIEludFJlY3Qgcm91bmRlZFJlY3QgPSByb3Vu
ZGVkSW50UmVjdChyZWN0KTsKKyAgICBpZiAocm91bmRlZFJlY3QgPT0gbV9sYXN0U2VudFZpc2li
bGVSZWN0ICYmIHNjYWxlID09IG1fbGFzdFNlbnRTY2FsZSAmJiB0cmFqZWN0b3J5VmVjdG9yID09
IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvcjo6U2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyb3VuZGVkUmVjdCwgc2NhbGUs
IHRyYWplY3RvcnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkp
OworICAgIG1fbGFzdFNlbnRWaXNpYmxlUmVjdCA9IHJvdW5kZWRSZWN0OworICAgIG1fbGFzdFNl
bnRTY2FsZSA9IHNjYWxlOworICAgIG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yID0gdHJhamVj
dG9yeVZlY3RvcjsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpSZW5kZXJOZXh0RnJhbWUoKSwg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2lu
dCYgcG9zaXRpb24pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdldCgpLCBwb3NpdGlvbikp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5bmNDYW52YXModWludDMy
X3QgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
eW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJm
YWNlVG9rZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpwdXJnZUJh
Y2tpbmdTdG9yZXMoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpQdXJnZUJhY2tpbmdTdG9y
ZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKworfQorI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmYxNWQxZDMxMGVkMzY0OWZhNzg5
MGE2ZTFlOGUzNWUzMmEzMzIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCkBA
IC0wLDAgKzEsOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eV9oCisjZGVmaW5lIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAorCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2lu
Y2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRU0dOb2Rl
OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5
ZXJJbmZvOworY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBXZWJMYXllclVwZGF0ZUlu
Zm87CisKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgeworcHVibGljOgorICAgIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSopOworICAgIHZpcnR1YWwg
fkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKKyAgICB2b2lkIHNldENv
bXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJ
RD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xh
eWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7
CisjZW5kaWYKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Cisg
ICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygp
OworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwor
ICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cik7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOworICAgIHZvaWQgY3JlYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihpbnQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYpOworICAgIHZvaWQg
ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZv
aWQgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZv
aWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvc2l0
aW9uKTsKKyAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKTsKKyAgICB2
b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIExheWVyVHJlZVJlbmRlcmVyKiBsYXllclRy
ZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwor
CisgICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5OworICAgIFJlZlB0cjxM
YXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fbGFz
dFNlbnRWaXNpYmxlUmVjdDsKKyAgICBmbG9hdCBtX2xhc3RTZW50U2NhbGU7CisgICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFj
ZT4gPiBtX3N1cmZhY2VzOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8g
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZWNhMDMy
ZmY0MTYxZTExZDAyOWU1ODQ4YTIzODdiMzc5NjhmYTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM4IEBACisjCisjICAgIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorIworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbWVzc2FnZXMg
LT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CisgICAgU2V0Q29tcG9zaXRpbmdMYXllclN0
YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0
Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNo
aWxkcmVuKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVy
RmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQor
I2VuZGlmCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisgICAgRGVs
ZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0
LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBkYXRlVGlsZUZv
ckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFy
Z2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFJlbW92
ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQorICAgIENyZWF0ZURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlIGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCBrZXkpCisgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFN5bmNDYW52YXModWludDMyX3Qg
aWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNl
VG9rZW4pCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NzA0ZTVlMzFkOTRjZDU5NTIyMTUzMDVjNmEzMWMzM2JmYjBlNjVhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNDk5IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJNZXNz
YWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgor
I2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgorI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0ZW1wbGF0ZTxjbGFz
cyBUPiBjbGFzcyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXIgeworcHVibGljOgorICAgIHN0YXRp
YyB2b2lkIGNhbGwoUGFzc1JlZlB0cjxUPiBvYmplY3RUb0d1YXJkLCBjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tl
cjxUPiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4ob2JqZWN0VG9H
dWFyZCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKGludm9rZSwgaW52b2tl
cik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcihQYXNz
UmVmUHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgbmV3RnVuY3Rpb24pCisg
ICAgICAgIDogb2JqZWN0VG9HdWFyZChvYmplY3QpCisgICAgICAgICwgZnVuY3Rpb24obmV3RnVu
Y3Rpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxUPiBvYmplY3RUb0d1YXJkOworICAg
IEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgc3RhdGljIHZvaWQgaW52b2tlKHZvaWQq
IGRhdGEpCisgICAgeworICAgICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9r
ZXIgPSBzdGF0aWNfY2FzdDxNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qPihkYXRhKTsKKyAg
ICAgICAgaW52b2tlci0+ZnVuY3Rpb24oKTsKKyAgICAgICAgZGVsZXRlIGludm9rZXI7CisgICAg
fQorfTsKKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAg
ICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNlCisgICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52
b2tlcjxMYXllclRyZWVSZW5kZXJlcj46OmNhbGwodGhpcywgZnVuY3Rpb24pOworfQorCitzdGF0
aWMgRmxvYXRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Ny
b2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBG
bG9hdFNpemUmIGNvbnRlbnRTaXplKQoreworICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0
ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMC4wZik7CisgICAgc2Nyb2xsUG9zaXRpb25YID0g
c3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNv
bnRlbnRSZWN0LndpZHRoKCkpOworCisgICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjpt
YXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwLjBmKTsKKyAgICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6
Om1pbihzY3JvbGxQb3NpdGlvblksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlzaWJsZUNvbnRl
bnRSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChzY3JvbGxQb3NpdGlvblgs
IHNjcm9sbFBvc2l0aW9uWSk7Cit9CisKK0xheWVyVHJlZVJlbmRlcmVyOjpMYXllclRyZWVSZW5k
ZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5
KQorICAgIDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkpCisgICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRXZWJMYXllcklEKQorICAgICwgbV9p
c0FjdGl2ZShmYWxzZSkKK3sKK30KKworTGF5ZXJUcmVlUmVuZGVyZXI6On5MYXllclRyZWVSZW5k
ZXJlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVy
KiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobmV3TGF5ZXIp
OworICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFsc2Up
OworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRleHR1
cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1h
cHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFj
Y2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKworICAgIGFk
anVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKKyAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50
Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJl
TWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIWxheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIu
Z2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdzKTsK
KyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBj
bGlwUmVjdCk7CisKKyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNp
dHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7CisgICAgICAg
IGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAgICAgIGN1cnJlbnRS
b290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJyZW50Um9vdExheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBs
YXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCBwYWludGVyKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0
dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVN
b2RlKTsKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisKKyAgICBpZiAoIWxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0KHBhaW50ZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZn
cmFwaGljc0NvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwor
ICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsK
KyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKK30KKwordm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXplID0gY29udGVudHNTaXplOwor
fQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0Owor
fQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgaWYg
KG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAobV9maXhlZExheWVy
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZpeGVkIGxheWVyIHBvc2l0
aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2ViIHByb2Nlc3Mgd2hlbiB3ZSB1cGRhdGUgdGhlIHZp
c2libGUgY29udGVudHMgcmVjdCAvIHNjcm9sbCBwb3NpdGlvbi4KKyAgICAvLyBJZiB3ZSB3YW50
IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNjdXJhdGVseSB0aGUgdmlld3BvcnQgd2hlbiB3ZSBt
b3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZXMsIHdlIGhhdmUgdG8gb2Zmc2V0Cisg
ICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQg
dGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9ydCB1c2VkIGZvciB0aGUgbGFzdCBsYXlvdXQuCisg
ICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3Zp
c2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2Nv
bnRlbnRzU2l6ZSk7CisgICAgRmxvYXRQb2ludCByZW5kZXJlZFNjcm9sbFBvc2l0aW9uID0gYm91
bmRlZFNjcm9sbFBvc2l0aW9uKG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLCBtX3Zp
c2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKKyAgICBGbG9hdFNpemUgZGVsdGEg
PSBzY3JvbGxQb3NpdGlvbiAtIHJlbmRlcmVkU2Nyb2xsUG9zaXRpb247CisKKyAgICBMYXllck1h
cDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVyTWFw
OjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vjb25kKS0+c2V0U2Nyb2xsUG9zaXRp
b25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlk
Q2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2Vu
KQoreworICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSB8fCAhbV90ZXh0dXJlTWFwcGVyKQor
ICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBlbnN1cmVM
YXllcihpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBjYW52YXNCYWNraW5n
U3RvcmU7CisgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzLmZpbmQoaWQpOworICAgIGlmIChpdCA9PSBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLmVuZCgpKSB7CisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBw
ZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgbV9zdXJmYWNlQmFja2lu
Z1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdTdG9yZSk7CisgICAgfSBlbHNlCisgICAgICAg
IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT5zZWNvbmQ7CisKKyAgICBjYW52YXNCYWNraW5nU3Rv
cmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7
CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkp
OworI2VuZGlmCit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4o
V2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZElEcykKK3sKKyAg
ICBlbnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMu
ZmluZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9
IGNoaWxkSURzW2ldOworICAgICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChj
aGlsZElEKTsKKyAgICAgICAgaWYgKCFjaGlsZCkgeworICAgICAgICAgICAgY2hpbGQgPSBjcmVh
dGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBtX2xheWVycy5hZGQoY2hp
bGRJRCwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CisgICAgfQorICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMo
V2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBl
bnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmlu
ZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsKKworICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJz
KTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdl
YkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQoreworICAgIGVuc3Vy
ZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlk
KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOworCisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBpdC0+c2Vjb25kOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVy
KGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIo
bGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0UG9zaXRpb24obGF5
ZXJJbmZvLnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOworICAgIGxh
eWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFu
Y2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldENoaWxkcmVu
VHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEJh
Y2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBsYXllci0+
c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBsYXllci0+
c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzVmlzaWJsZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKKyAgICB0b0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhl
ZFRvVmlld3BvcnQpOworCisgICAgaWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCisgICAg
ICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2Zp
eGVkTGF5ZXJzLnJlbW92ZShpZCk7CisKKyAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJv
b3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNS
b290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+
c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNE
KGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAm
JiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
K3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOworICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBtX2ZpeGVkTGF5ZXJzLnJl
bW92ZShsYXllcklEKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyNlbmRpZgorICAgIGRlbGV0ZSBsYXllcjsK
K30KKworCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVMYXllcihXZWJMYXllcklEIGlk
KQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9pbnRlciBhbmQg
bWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBub3QgY29weWFi
bGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgpKQorICAgICAg
ICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOworfQorCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCit7
CisgICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7CisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxs
Q2hpbGRyZW4oKTsKKworICAgIGlmICghbGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsK
K30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gTGF5ZXJUcmVlUmVuZGVy
ZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQoreworICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKKyAgICBB
U1NFUlQobGF5ZXIpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2lu
Z1N0b3JlID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUqPihsYXllci0+YmFj
a2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAg
bGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIH0KKyAgICBB
U1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlOworfQorCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVh
dGVUaWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1v
dmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBnZXRCYWNraW5n
U3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKK30KKwordm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKKyAgICBiYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdl
dFJlY3QsIHVwZGF0ZS5zdXJmYWNlLCB1cGRhdGUub2Zmc2V0KTsKKyAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNy
ZWF0ZSgpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNr
aW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFw
cGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOworfQorCit2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2
NF90IGltYWdlSUQpCit7CisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAgICAgIGxheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFw
PGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBp
dCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNTRVJU
KGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKKyAgICBsYXllci0+c2V0
Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCit7CisgICAgSGFzaFNldDxSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYmFja2luZ1N0b3Jlc1dp
dGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5k
aW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5jb21t
aXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgbV9iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3JlbmRlcmVkQ29udGVudHNTY3Jv
bGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKwor
ICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7CisgICAg
Y29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKKworICAgIC8vIFRoZSBwZW5kaW5nIHRpbGVzIHN0YXRl
IGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBwcm9jZXNzIHRvIHJl
bmRlciB0aGUgbmV4dCBvbmUuCisgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5yZW5kZXJOZXh0
RnJhbWUoKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkK
K3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fdGV4
dHVyZU1hcHBlcikgeworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpj
cmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgICAgIHN0YXRpY19jYXN0PFRl
eHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0
YW5jZUFudGlhbGlhc2luZyh0cnVlKTsKKyAgICB9CisKKyAgICBtX3Jvb3RMYXllciA9IGNyZWF0
ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Cisg
ICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisK
KyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3
b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6
ZSgxLjAsIDEuMCkpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgp
KS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAgLy8gV2UgZW5xdWV1
ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJl
IGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICBt
X3JlbmRlclF1ZXVlW2ldKCk7CisKKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQoreworICAgIFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisK
KyAgICBpZiAobGF5ZXIpCisgICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNp
dmUoKTsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwor
I2VuZGlmCisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX3Jv
b3RMYXllci5jbGVhcigpOworICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkV2ViTGF5ZXJJRDsK
KyAgICBtX2xheWVycy5jbGVhcigpOworICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKKyAgICBt
X3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuY2xlYXIoKTsKKworICAgIHNldEFjdGl2ZShmYWxzZSk7CisKKyAgICBjYWxsT25NYWlu
VGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMsIHRoaXMp
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sK
KyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOworfQorCit2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpkZXRhY2goKQoreworICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSA9IDA7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIW1faXNBY3RpdmUpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKK30KKwor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIGlm
IChtX2lzQWN0aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGF2ZSB0
byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KKyAgICAvLyBJZiB0aGVyZSBhcmUg
c29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRoZW4gdGhvc2UgdXBkYXRl
cyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2RlCisgICAgLy8gYW5kIGNh
bm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgorICAgIG1fcmVu
ZGVyUXVldWUuY2xlYXIoKTsKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZlOworICAgIGlmIChtX2lz
QWN0aXZlKQorICAgICAgICByZW5kZXJOZXh0RnJhbWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjNiZTM4YzU5YzIyMGU1NWVhYjA4MTc5
OGZiNTgwMDM3YjkxMzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtMCwwICsxLDE1
NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVSZW5kZXJlcl9oCisj
ZGVmaW5lIExheWVyVHJlZVJlbmRlcmVyX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2Uu
aCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJX
ZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lu
dFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1
bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTsKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7CitjbGFz
cyBXZWJMYXllckluZm87CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK2NsYXNzIExheWVy
VHJlZVJlbmRlcmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyVHJlZVJlbmRl
cmVyPiwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAg
IHN0cnVjdCBUaWxlVXBkYXRlIHsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VSZWN0
OworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3Q7CisgICAgICAgIFJlZlB0cjxT
aGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBvZmZz
ZXQ7CisgICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc291cmNlLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFj
ZT4gbmV3U3VyZmFjZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG5ld09mZnNldCkKKyAgICAg
ICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAgICAgICAsIHRhcmdldFJlY3QodGFy
Z2V0KQorICAgICAgICAgICAgLCBzdXJmYWNlKG5ld1N1cmZhY2UpCisgICAgICAgICAgICAsIG9m
ZnNldChuZXdPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgTGF5ZXJU
cmVlUmVuZGVyZXIoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSopOworICAgIHZpcnR1YWwgfkxh
eWVyVHJlZVJlbmRlcmVyKCk7CisgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgdm9p
ZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyOjpQYWludEZsYWdzID0gMCk7CisgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0
KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOworICAgIHZvaWQgc3luY1Jl
bW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50MzJf
dCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pOworCisgICAgdm9pZCBkZXRhY2goKTsKKyAgICB2b2lkIGFwcGVuZFVw
ZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgp
OworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworCisgICAgdm9pZCBkZWxldGVMYXllcihXZWJM
YXllcklEKTsKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkxheWVySUQpOworICAgIHZvaWQg
c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsK
KyAgICB2b2lkIHNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKFdlYkxh
eWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorCisgICAg
dm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQg
cmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXll
cklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2Vz
KCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4pOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworCitwcml2YXRlOgorICAg
IFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJ
RCk7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBp
ZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQo
aWQpOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4g
bV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0K
KyAgICB2b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAg
dm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
bV92aXNpYmxlQ29udGVudHNSZWN0OworCisgICAgLy8gUmVuZGVyIHF1ZXVlIGNhbiBiZSBhY2Nl
c3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWludE5vZGUgY2FsbCBzdGFjayEK
KyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CisKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4
dHVyZU1hcHBlcjsKKyAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBnZXRC
YWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgUmVmUHRyPFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVN
YXA7CisgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOwor
I2VuZGlmCisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOworICAgIHZvaWQgc3lu
Y2hyb25pemVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZvaWQgZW5zdXJlUm9vdExh
eWVyKCk7CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIGNvbW1p
dFRpbGVPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIHZvaWQg
cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAg
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTsK
KyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisgICAgVmVj
dG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisKKyAgICBMYXllck1hcCBtX2xheWVy
czsKKyAgICBMYXllck1hcCBtX2ZpeGVkTGF5ZXJzOworICAgIFdlYkxheWVySUQgbV9yb290TGF5
ZXJJRDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3Np
dGlvbjsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb247CisgICAgYm9vbCBtX2lzQWN0aXZlOworfTsKKworfTsKKworI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIExheWVyVHJlZVJlbmRlcmVy
X2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAK
aW5kZXggNWY3YjEwNjU0NzE0Nzc3NjY3NzQyMmU3YWI2ZmNlMTBiNGQ3NTI1Ni4uNzllNjEwZTk2
MWRjZGZlYzVlODg5NzRmZjE5NjQzN2FkOGM1NTUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5oIgogI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAjZW5kaWYKQEAgLTU4LDcg
KzU4LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKICAgICBzaXplRGlkQ2hhbmdlKCk7CiB9
CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKIHsKICAgICBt
X3dlYlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9ydFZpc2libGVSZWN0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggOTk0
NjBlNDk5YTAzYzkzYWJiNThiYzNmM2RlZmIwZTkzYzNlMWRkNC4uNWMyZDUwOGM0NjBiMThmOGQ4
MjJhMmFiNjJjYzBlYWIxMzcwNGViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eS5oCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KCk7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpZXdwb3J0Vmlz
aWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsgfQogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKQEAgLTExMyw3ICsxMTMsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7CiAgICAgV2ViQ29yZTo6
SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBPd25QdHI8TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eT4gbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OwogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4
IGNkOGM1ZjYyOWZhNzNlMTk1ZjAzYzM5NjczZDQ1MTE2NTNkZTAyNjMuLmNkOWNhZmMxNzY0YzQ3
NWRhN2JkYWRkNzdiZDAyZmQwNjNlYmE5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAKLSNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2VuZGlmCiAKQEAgLTU4
LDcgKzU4LDcgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKFdl
YlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogICAgICwgbV9pc0JhY2tpbmdTdG9yZURpc2NhcmRh
YmxlKHRydWUpCiAgICAgLCBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcihSdW5Mb29wOjpjdXJy
ZW50KCksIHRoaXMsICZEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlzY2FyZEJhY2tpbmdTdG9yZSkK
IHsKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBhbGxvdyBtZXNzYWdl
cyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBlbnRlcmVkIHRoZXJl
LgogICAgIGlmICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5mb3Jj
ZUNvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkg
PSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0aGlzKSk7CkBAIC0zNTMs
MTMgKzM1MywxMyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAgIG1fYmFja2luZ1N0b3Jl
ID0gbnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0Owog
ICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVy
VHJlZUNvbnRleHQpOwotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKICAgICBpZiAoIW1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkK
ICAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gYWRvcHRQdHIobmV3IExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkodGhpcykpOwogI2VuZGlmCiB9CiAKLSNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiB2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiAgICAgaWYg
KG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggMTlhNzcxZjJjYjU3NjFjN2M0ZmMxMGI3
NzEwZGJmN2UyMDU3NzQ0Zi4uMGM5ZjA0ZjhlMDJkYThmMGNkYmMwYTMwMTBmNWYwNDFmYTMzOTk4
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmgKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1fbGF5ZXJUcmVlQ29udGV4dC5pc0Vt
cHR5KCk7IH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWUzMjQwNDI0MWI0
MDFlZWQ5ZTVmZTI1NTk5ODM3NmM5NTJjM2Y4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01Q
T1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCi0KLSNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5m
by5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkxh
eWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJl
YVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIodGhpcykpKQotICAgICwgbV9sYXN0U2VudFNjYWxlKDApCi17Ci19Ci0KLUxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5KCkKLXsKLSAgICBtX3Jl
bmRlcmVyLT5kZXRhY2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1
cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9y
dCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpc3BhdGNoVXBkYXRl
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIG1fcmVuZGVyZXItPmFw
cGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8u
c2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0
YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8pCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaW50IHRva2VuID0gdXBkYXRlSW5mby5zdXJmYWNlSGFu
ZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgaWYgKHRva2VuKSB7Ci0gICAgICAgIEhh
c2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+OjppdGVyYXRvciBpdCA9
IG1fc3VyZmFjZXMuZmluZCh0b2tlbik7Ci0gICAgICAgIGlmIChpdCA9PSBtX3N1cmZhY2VzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVw
ZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0gICAgICAgICAgICBtX3N1cmZhY2VzLmFkZCh0b2tl
biwgc3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3VyZmFjZSA9IGl0LT5z
ZWNvbmQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpj
cmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbHNlCi0gICAgc3VyZmFjZSA9IFNo
YXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOwotI2VuZGlm
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRp
bGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJnZXRSZWN0LCBzdXJmYWNl
LCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVU
aWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQg
aWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRl
bGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5n
TGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci0g
ICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJ
bmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNo
aWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZmlsdGVycykpOwotfQot
I2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUo
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVz
aExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUmIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5
LCBiaXRtYXApKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5n
ZXQoKSwga2V5KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29u
dGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVu
ZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICAv
LyBJbmZvcm0gdGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCi0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVD
b250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QpKTsKLQotICAgIC8vIFJvdW5kIHRo
ZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IGl0cyBzaXpl
IHN0YXlzIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0
cyBvbiBsYXlvdXQuCi0gICAgSW50UmVjdCByb3VuZGVkUmVjdCA9IHJvdW5kZWRJbnRSZWN0KHJl
Y3QpOwotICAgIGlmIChyb3VuZGVkUmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2Nh
bGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRy
YWplY3RvcnlWZWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJvdW5kZWRSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZl
Y3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci0gICAgbV9sYXN0
U2VudFZpc2libGVSZWN0ID0gcm91bmRlZFJlY3Q7Ci0gICAgbV9sYXN0U2VudFNjYWxlID0gc2Nh
bGU7Ci0gICAgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IgPSB0cmFqZWN0b3J5VmVjdG9yOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCi17
Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29u
c3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52
YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tl
bikpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0
b3JlcygpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBt
X2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi19Ci0jZW5kaWYgLy8g
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZmVkMzNhODEwNTY5YzgxYTk5ZjhiMmZhYWUwNDc0NGNjMTJjZjdlZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUg
KzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRv
clByb3h5X2gKLSNkZWZpbmUgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCi0KLSNpZiBVU0Uo
VUlfU0lERV9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJT
dXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVNHTm9kZTsKLVFUX0VO
RF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkxheWVySW5mbzsK
LWNsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOwotY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwot
Ci1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLXB1YmxpYzoKLSAgICBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAgICB2aXJ0dWFsIH5MYXll
clRyZWVDb29yZGluYXRvclByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3Rh
dGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3Np
dGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZp
bHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2Vu
ZGlmCi0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwotICAgIHZv
aWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKLSAg
ICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAgICB2
b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOwot
ICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQg
dGlsZUlEKTsKLSAgICB2b2lkIGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qs
IGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmKTsKLSAgICB2b2lkIGRlc3Ry
b3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90KTsKLSAgICB2b2lkIGRpZFJlY2VpdmVM
YXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIGRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7
Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0gICAgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVl
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLQot
ICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLSAgICBSZWZQdHI8V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2xh
c3RTZW50VmlzaWJsZVJlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0U2VudFNjYWxlOwotICAgIFdlYkNv
cmU6OkZsb2F0UG9pbnQgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3I7Ci0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+ID4gbV9zdXJmYWNlczsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8v
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4NGI5MTViZDg2ZjU2NWMxY2I2ZmFjMDIw
YTkzNjhiOTE5YmRiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5t
ZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMKLSMgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0jCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQotbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6
OldlYkxheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVu
KHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0gICAgU2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50
MzJfdCBpZCkKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJ
bmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQs
IGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBs
YXllcklELCBpbnQgdGlsZUlEKQotICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGlu
dDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKLSAgICBE
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi0gICAgRGlkUmVuZGVy
RnJhbWUoKQotICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBv
c2l0aW9uKQotICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCi19Ci0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJlMDk2YWViOGRjYTdhOTBhMDgzZmI0NjA5NmIz
NTZhYjc3OTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJX
ZWJMYXllclRyZWVSZW5kZXJlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKLSNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgotI2luY2x1ZGUgIlVwZGF0ZUlu
Zm8uaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi10ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBNYWluVGhy
ZWFkR3VhcmRlZEludm9rZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGNhbGwoUGFzc1Jl
ZlB0cjxUPiBvYmplY3RUb0d1YXJkLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
LSAgICB7Ci0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IG5l
dyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4ob2JqZWN0VG9HdWFyZCwgZnVuY3Rpb24pOwot
ICAgICAgICBjYWxsT25NYWluVGhyZWFkKGludm9rZSwgaW52b2tlcik7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcihQYXNzUmVmUHRyPFQ+IG9iamVjdCwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgbmV3RnVuY3Rpb24pCi0gICAgICAgIDogb2JqZWN0VG9H
dWFyZChvYmplY3QpCi0gICAgICAgICwgZnVuY3Rpb24obmV3RnVuY3Rpb24pCi0gICAgewotICAg
IH0KLQotICAgIFJlZlB0cjxUPiBvYmplY3RUb0d1YXJkOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb247Ci0gICAgc3RhdGljIHZvaWQgaW52b2tlKHZvaWQqIGRhdGEpCi0gICAgewotICAg
ICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBzdGF0aWNfY2FzdDxN
YWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qPihkYXRhKTsKLSAgICAgICAgaW52b2tlci0+ZnVu
Y3Rpb24oKTsKLSAgICAgICAgZGVsZXRlIGludm9rZXI7Ci0gICAgfQotfTsKLQotdm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQotewotICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgZnVuY3Rpb24o
KTsKLSAgICBlbHNlCi0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxXZWJMYXllclRy
ZWVSZW5kZXJlcj46OmNhbGwodGhpcywgZnVuY3Rpb24pOwotfQotCi1zdGF0aWMgRmxvYXRQb2lu
dCBib3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNv
bnRlbnRTaXplKQotewotICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9s
bFBvc2l0aW9uLngoKSwgMC4wZik7Ci0gICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Ny
b2xsUG9zaXRpb25YLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0Lndp
ZHRoKCkpOwotCi0gICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9z
aXRpb24ueSgpLCAwLjBmKTsKLSAgICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQ
b3NpdGlvblksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdo
dCgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0
aW9uWSk7Ci19Ci0KLVdlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXllclRyZWVSZW5kZXJlcihM
YXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5KQotICAg
IDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkp
Ci0gICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRXZWJMYXllcklEKQotICAgICwgbV9pc0FjdGl2
ZShmYWxzZSkKLXsKLX0KLQotV2ViTGF5ZXJUcmVlUmVuZGVyZXI6On5XZWJMYXllclRyZWVSZW5k
ZXJlcigpCi17Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xh
eWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKLSAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobmV3TGF5
ZXIpOwotICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFs
c2UpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3Qs
IFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKLXsKLSAgICBpZiAoIW1fdGV4
dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBw
ZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLQot
ICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKLSAgICBHcmFwaGljc0xheWVyKiBj
dXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFjdXJyZW50Um9vdExheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZs
YWdzKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBjbGlwUmVjdCk7Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9
IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7Ci0g
ICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICBjdXJyZW50Um9v
dExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICB9Ci0K
LSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKLSAg
ICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCBwYWludGVyKQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKLSAgICBBU1NF
UlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6
U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAgIFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7Ci0KLSAg
ICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3ND
b250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWlu
dGluZygpOwotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFp
bnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKLX0K
LQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIG1fY29udGVudHNTaXplID0gY29u
dGVudHNTaXplOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zpc2libGVDb250ZW50
c1JlY3QgPSByZWN0OwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3
cG9ydCgpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAg
bV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKLXsK
LSAgICBpZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZpeGVkIGxheWVyIHBvc2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2ViIHByb2Nlc3Mg
d2hlbiB3ZSB1cGRhdGUgdGhlIHZpc2libGUgY29udGVudHMgcmVjdCAvIHNjcm9sbCBwb3NpdGlv
bi4KLSAgICAvLyBJZiB3ZSB3YW50IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNjdXJhdGVseSB0
aGUgdmlld3BvcnQgd2hlbiB3ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZXMs
IHdlIGhhdmUgdG8gb2Zmc2V0Ci0gICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUg
Y3VycmVudCBwb3NpdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9ydCB1c2VkIGZv
ciB0aGUgbGFzdCBsYXlvdXQuCi0gICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGJvdW5k
ZWRTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSwgbV92aXNp
YmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxvYXRQb2ludCByZW5kZXJl
ZFNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fcmVuZGVyZWRDb250ZW50
c1Njcm9sbFBvc2l0aW9uLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsK
LSAgICBGbG9hdFNpemUgZGVsdGEgPSBzY3JvbGxQb3NpdGlvbiAtIHJlbmRlcmVkU2Nyb2xsUG9z
aXRpb247Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQo
KTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vj
b25kKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uKQotewotICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3Np
dGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2Fu
dmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVp
bnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotewotICAgIGlmIChjYW52YXNTaXplLmlzRW1w
dHkoKSB8fCAhbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNl
QmFja2luZ1N0b3JlPiBjYW52YXNCYWNraW5nU3RvcmU7Ci0gICAgU3VyZmFjZUJhY2tpbmdTdG9y
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQoaWQpOwotICAg
IGlmIChpdCA9PSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmVuZCgpKSB7Ci0gICAgICAgIGNhbnZh
c0JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUo
KTsKLSAgICAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdT
dG9yZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT5zZWNv
bmQ7Ci0KLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGlj
c1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRp
YShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9y
PFdlYkxheWVySUQ+JiBjaGlsZElEcykKLXsKLSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRy
ZW47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOwotICAgICAgICBHcmFw
aGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgaWYgKCFjaGls
ZCkgewotICAgICAgICAgICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7
Ci0gICAgICAgICAgICBtX2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOwotICAgICAgICB9Ci0g
ICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgfQotICAgIGxheWVyLT5zZXRDaGls
ZHJlbihjaGlsZHJlbik7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgTGF5
ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1fbGF5ZXJzLmVuZCgpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29u
ZDsKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKLX0KLSNlbmRpZgotCi12b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdl
YkxheWVySW5mbyYgbGF5ZXJJbmZvKQotewotICAgIGVuc3VyZUxheWVyKGlkKTsKLSAgICBMYXll
ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0g
bV9sYXllcnMuZW5kKCkpOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25k
OwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8u
cmVwbGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5t
YXNrKSk7Ci0KLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Ci0gICAgbGF5
ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5
ZXJJbmZvLnRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5h
bmNob3JQb2ludCk7Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5j
aGlsZHJlblRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXll
ckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5
ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVy
SW5mby5jb250ZW50c1JlY3QpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZv
LmRyYXdzQ29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllckluZm8u
Y29udGVudHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVy
KS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpOwotCi0gICAg
aWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCi0gICAgICAgIG1fZml4ZWRMYXllcnMuYWRk
KGlkLCBsYXllcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7
Ci0KLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEKTsKLQotICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KLSAgICBs
YXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxh
eWVySW5mby5tYXNrc1RvQm91bmRzKTsKLSAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8u
b3BhY2l0eSk7Ci0gICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMz
RCk7Ci0gICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlk
KQotICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fbGF5ZXJz
LnJlbW92ZShsYXllcklEKTsKLSAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92
ZShsYXllcklEKTsKLSNlbmRpZgotICAgIGRlbGV0ZSBsYXllcjsKLX0KLQotCi12b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjplbnN1cmVMYXllcihXZWJMYXllcklEIGlkKQotewotICAgIC8vIFdl
IGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNl
bHZlcywKLSAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBub3QgY29weWFibGUuCi0gICAgaWYgKG1f
bGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgpKQotICAgICAgICBtX2xheWVycy5hZGQo
aWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQpCi17Ci0gICAgaWYgKGxh
eWVySUQgPT0gbV9yb290TGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5
ZXJJRCA9IGxheWVySUQ7Ci0KLSAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
LQotICAgIGlmICghbGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKLX0KLQotUGFzc1Jl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdT
dG9yZShXZWJMYXllcklEIGlkKQotewotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKLSAgICBBU1NFUlQobGF5ZXIpOwot
ICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8
TGF5ZXJCYWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwotICAgIGlm
ICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0
b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3Rv
cmUuZ2V0KCkpOwotICAgIH0KLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1cm4g
YmFja2luZ1N0b3JlOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgZ2V0
QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOwotfQotCi12
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwg
aW50IHRpbGVJRCkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUo
dGlsZUlEKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJM
YXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKLXsK
LSAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdT
dG9yZShsYXllcklEKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRh
dGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5zdXJmYWNlLCB1cGRhdGUu
b2Zmc2V0KTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tp
bmdTdG9yZSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGlu
dDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCi17
Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwotICAgIGJhY2tpbmdTdG9y
ZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0ZUlt
YWdlKCkuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1h
Z2UoaW50NjRfdCBpbWFnZUlEKQotewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJl
bW92ZShpbWFnZUlEKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1h
Z2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAg
aWYgKCFpbWFnZUlEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5z
ZWNvbmQuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxl
T3BlcmF0aW9ucygpCi17Ci0gICAgSGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46
Oml0ZXJhdG9yIGVuZCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsK
LSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBp
dCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBw
ZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkK
LXsKLSAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRl
cmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLQotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Ci0gICAgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKLQot
ICAgIC8vIFRoZSBwZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3Jl
ZW4sIHRlbGwgdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCi0gICAgY2Fs
bE9uTWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1l
LCB0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFt
ZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAgbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsKLX0KLQotdm9pZCBX
ZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKLXsKLSAgICBpZiAobV9yb290
TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikgewotICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBl
cjo6T3BlbkdMTW9kZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KG1f
dGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyh0
cnVlKTsKLSAgICB9Ci0KLSAgICBtX3Jvb3RMYXllciA9IGNyZWF0ZUxheWVyKEludmFsaWRXZWJM
YXllcklEKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7Ci0gICAg
bV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7Ci0KLSAgICAvLyBUaGUgcm9vdCBs
YXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQg
b3V0LgotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwotICAg
IHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBl
cihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQg
ZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBj
b250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICBtX3JlbmRlclF1ZXVlW2ld
KCk7Ci0KLSAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7Ci0KLSAgICBpZiAobGF5
ZXIpCi0gICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKLQotICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwotI2VuZGlmCi0KLSAg
ICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBtX3Jvb3RMYXllci5jbGVh
cigpOwotICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkV2ViTGF5ZXJJRDsKLSAgICBtX2xheWVy
cy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVNYXBw
ZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIo
KTsKLQotICAgIHNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQo
JldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMsIHRoaXMpKTsKLX0KLQot
dm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBp
ZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotfQotCi12b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjpkZXRhY2goKQotewotICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9
IDA7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoIW1faXNBY3RpdmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKLX0KLQot
dm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQotewotICAg
IGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSGF2
ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KLSAgICAvLyBJZiB0aGVyZSBh
cmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRoZW4gdGhvc2UgdXBk
YXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2RlCi0gICAgLy8gYW5k
IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgotICAgIG1f
cmVuZGVyUXVldWUuY2xlYXIoKTsKLSAgICBtX2lzQWN0aXZlID0gYWN0aXZlOwotICAgIGlmICht
X2lzQWN0aXZlKQotICAgICAgICByZW5kZXJOZXh0RnJhbWUoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDFjODE1MmU0MDgzYjQyM2U5ZDM2ODQ3NmI0ZTNmMGJhZThkNGI0
ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwxNTQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBXZWJMYXllclRy
ZWVSZW5kZXJlcl9oCi0jZGVmaW5lIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKLQotI2lmIFVTRShV
SV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzU3VyZmFjZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4K
LSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIExheWVyQmFja2luZ1N0b3JlOwotY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTsKLWNsYXNzIFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKLQot
Y2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
V2ViTGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFRpbGVVcGRhdGUgewotICAgICAgICBXZWJDb3JlOjpJ
bnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdDsK
LSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7Ci0gICAgICAgIFdlYkNv
cmU6OkludFBvaW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwgUGFzc1JlZlB0
cjxTaGFyZWFibGVTdXJmYWNlPiBuZXdTdXJmYWNlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
bmV3T2Zmc2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAg
ICwgdGFyZ2V0UmVjdCh0YXJnZXQpCi0gICAgICAgICAgICAsIHN1cmZhY2UobmV3U3VyZmFjZSkK
LSAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0g
ICAgfTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5
Kik7Ci0gICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKTsKLSAgICB2b2lkIHB1cmdl
R0xSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKLSAgICB2b2lk
IHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCk7Ci0gICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOwotICAgIHZvaWQgc2V0Q29udGVu
dHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7Ci0gICAg
dm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52
YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0KLSAgICB2b2lkIGRldGFj
aCgpOwotICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7Ci0KLSAg
ICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQpOwotICAgIHZvaWQgc2V0Um9vdExheWVySUQo
V2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0
IFZlY3RvcjxXZWJMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShXZWJMYXllcklE
LCBjb25zdCBXZWJMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCBzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBm
bG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Ci0gICAg
dm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAg
IHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50
NjRfdCk7Ci0KLXByaXZhdGU6Ci0gICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IGxheWVyQnlJRChXZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVy
SUQpID8gMCA6IG1fbGF5ZXJzLmdldChpZCk7IH0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQotCi0gICAgLy8gUmVp
bXBsZW1lbnRhdGlvbnMgZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50LgotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQo
Y29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93
RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBw
YWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZvaWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMo
KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKj4gTGF5ZXJNYXA7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOwot
ICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0KLSAgICAvLyBS
ZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhyZWFkIG9yIHVwZGF0
ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9y
ZW5kZXJRdWV1ZTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotICAgIFBhc3NSZWZQdHI8TGF5ZXJC
YWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKLSAgICBIYXNoTWFwPGlu
dDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwotICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0
b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKLSNlbmRpZgotI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBSZWZQ
dHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJh
Y2tpbmdTdG9yZU1hcDsKLSAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tp
bmdTdG9yZXM7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Ci0g
ICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBhc3NpZ25JbWFnZVRvTGF5
ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJRCk7Ci0gICAgdm9pZCBl
bnN1cmVSb290TGF5ZXIoKTsKLSAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwotICAg
IHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKLSAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7
Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3Jl
cygpOwotCi0gICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbV9sYXllclRyZWVDb29yZGlu
YXRvclByb3h5OwotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXll
cjsKLSAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKLQotICAgIExheWVy
TWFwIG1fbGF5ZXJzOwotICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7Ci0gICAgV2ViTGF5ZXJJ
RCBtX3Jvb3RMYXllcklEOwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fcmVuZGVyZWRDb250ZW50
c1Njcm9sbFBvc2l0aW9uOwotICAgIFdlYkNvcmU6OkludFBvaW50IG1fcGVuZGluZ1JlbmRlcmVk
Q29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBib29sIG1faXNBY3RpdmU7Ci19OwotCi19Owot
Ci0jZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyBXZWJMYXll
clRyZWVSZW5kZXJlcl9oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAppbmRleCBmZDBjMGVhY2I5NDM3YTc5ZjNiODBhNzA5MjM2MzFiZWU2NDg4NDFmLi41YzUy
MmMwNmZhNTc1ZDc2Mzc2ZTdjMTAzMjlkNDdjODNjZTg2MTExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtOTQsNyArOTQsNyBAQAogI2luY2x1ZGUgIldl
YkludGVudFNlcnZpY2VJbmZvLmgiCiAjZW5kaWYKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJMYXllclRyZWVD
b29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgogCkBAIC0xNzQ3LDcgKzE3NDcsNyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYg
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
ICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eT4oKSkgewogICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBhcmd1bWVu
dHMpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VTR05vZGUuY3BwCmluZGV4IDRkZTc3ZjcwYTM5NWM2YTExMzU0NjgxNmFjOTU0OTg3
NTU4NjVhODkuLmViNzAyMzk5MDE5NDk2MWM5ZGI4M2Y1ZTYzZDQxZDBiMGNiNDkyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwCkBAIC0y
MSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dO
b2RlLmgiCiAKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8UXRHdWkvUVBvbHlnb25GPgogI2luY2x1ZGUg
PFF0UXVpY2svUVNHU2ltcGxlUmVjdE5vZGU+CiAjaW5jbHVkZSA8cHJpdmF0ZS9xc2dyZW5kZXJu
b2RlX3AuaD4KQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENv
bnRlbnRzU0dOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogcHVibGljOgotICAgIENvbnRl
bnRzU0dOb2RlKFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQorICAg
IENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQog
ICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgewogICAgICAgICBsYXllclRyZWVS
ZW5kZXJlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAot
ICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVl
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CiAKIHByaXZhdGU6
CiAgICAgUVJlY3RGIGNsaXBSZWN0KCkgY29uc3QKQEAgLTEwNSw3ICsxMDUsNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gcmVzdWx0UmVjdDsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViTGF5
ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVy
PiBtX3JlbmRlcmVyOwogfTsKIAogUXRXZWJQYWdlU0dOb2RlOjpRdFdlYlBhZ2VTR05vZGUoKQpA
QCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRTY2FsZShmbG9hdCBz
Y2FsZSkKICAgICBzZXRNYXRyaXgobWF0cml4KTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VTR05vZGU6
OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQor
dm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVu
ZGVyZXI+IHJlbmRlcmVyKQogewogICAgIGlmIChtX2NvbnRlbnRzTm9kZSAmJiBtX2NvbnRlbnRz
Tm9kZS0+bGF5ZXJUcmVlUmVuZGVyZXIoKSA9PSByZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCmluZGV4IDIy
YTViY2ZiYWVjMjBhYjgzNGM4ODc4NWE3M2FhYjU3NjU1NTY4ODYuLjExZDE4OTg0ZWRhMWU4ODE3
OTBmOTJlYjljYTJkMWFiMWVmNDk5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlU0dOb2RlLmgKQEAgLTMxLDE0ICszMSwxNCBAQCBRVF9FTkRfTkFNRVNQQUNF
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVudHNTR05vZGU7Ci1jbGFzcyBXZWJM
YXllclRyZWVSZW5kZXJlcjsKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVyOwogCiBjbGFzcyBRdFdl
YlBhZ2VTR05vZGUgOiBwdWJsaWMgUVNHVHJhbnNmb3JtTm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBRdFdlYlBhZ2VTR05vZGUoKTsKICAgICAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kKGNvbnN0
IFFSZWN0RiYsIGNvbnN0IFFDb2xvciYpOwogICAgICAgICB2b2lkIHNldFNjYWxlKGZsb2F0KTsK
LSAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRlcmVy
Pik7CisgICAgICAgIHZvaWQgc2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxMYXllclRyZWVSZW5kZXJl
cj4pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29udGVudHNTR05vZGUqIG1fY29udGVudHNO
b2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJh
Y2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFj
a2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkYmUwY2JhNTFj
Yjc0NDJjZGJjNDc4YWJlYjFlYWY3NGUwOTVjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVy
QmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElO
RykKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFj
ZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci12b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldFJlY3QobV90YXJnZXRSZWN0KTsKLSAgICB0
YXJnZXRSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7Ci0gICAgYm9vbCBzaG91bGRSZXNldCA9IGZh
bHNlOwotICAgIGlmICh0YXJnZXRSZWN0ICE9IHJlY3QoKSkgewotICAgICAgICBzZXRSZWN0KHRh
cmdldFJlY3QpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotICAgIFJlZlB0
cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVyZSgpOwotICAgIGlmICghdGV4
dHVyZSkgewotICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgp
OwotICAgICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOwotICAgICAgICBzaG91bGRSZXNl
dCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFJlc2V0KQotICAgICAgICB0ZXh0dXJl
LT5yZXNldChtX3RhcmdldFJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPmZsYWdzKCkgJiBTaGFyZWFi
bGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDog
MCk7Ci0KLSAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0
LCBtX3N1cmZhY2VPZmZzZXQpOwotICAgIG1fc3VyZmFjZS5jbGVhcigpOwotfQotCi12b2lkIExh
eWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3NvdXJjZVJlY3Qg
PSBzb3VyY2VSZWN0OwotICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldFJlY3Q7Ci0gICAgbV9zdXJm
YWNlT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3VyZmFjZSA9IGJ1ZmZlcjsKLX0KLQotdm9pZCBM
YXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZShpbnQgaWQsIGZsb2F0IHNjYWxlKQotewotICAg
IG1fdGlsZXMuYWRkKGlkLCBMYXllckJhY2tpbmdTdG9yZVRpbGUoc2NhbGUpKTsKLSAgICBtX3Nj
YWxlID0gc2NhbGU7Ci19Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUoaW50
IGlkKQotewotICAgIG1fdGlsZXNUb1JlbW92ZS5hcHBlbmQoaWQpOwotfQotCi0KLXZvaWQgTGF5
ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgSGFzaE1hcDxp
bnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlk
KTsKLSAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAgaXQtPnNlY29uZC5pbmNy
ZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vjb25kLnNldEJhY2tCdWZmZXIodGFyZ2V0
UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKLX0KLQotUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAg
SGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVU
aWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT5zZWNvbmQu
dGV4dHVyZSgpOwotICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0
dXJlOwotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Ci19
Ci0KLXN0YXRpYyBib29sIHNob3VsZFNob3dUaWxlRGVidWdWaXN1YWxzKCkKLXsKLSNpZiBQTEFU
Rk9STShRVCkKLSAgICByZXR1cm4gKHFnZXRlbnYoIlFUX1dFQktJVF9TSE9XX0NPTVBPU0lUSU5H
X0RFQlVHX1ZJU1VBTFMiKSA9PSAiMSIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIExheWVyQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1
cmUqIG1hc2spCi17Ci0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGlsZXNUb1BhaW50
OwotCi0gICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQsIGluIGNh
c2UgdGhlIG9wYWNpdHkgaGFzIGNoYW5nZWQuCi0gICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2lu
Z1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgRmxvYXRSZWN0
IGNvdmVyZWRSZWN0OwotICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgTGF5ZXJCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNlY29uZDsKLSAgICAgICAg
aWYgKCF0aWxlLnRleHR1cmUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICh0aWxlLnNjYWxlKCkgPT0gbV9zY2FsZSkgewotICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFw
cGVuZCgmdGlsZSk7Ci0gICAgICAgICAgICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE9ubHkgc2hv
dyB0aGUgcHJldmlvdXMgdGlsZSBpZiB0aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZm
ZWN0IGxvb2tzIGxpa2UgYSBidWcuCi0gICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNj
YWxlIHRpbGUgYW55d2F5IGlmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQt
c2NhbGUgdGlsZS4KLSAgICAgICAgaWYgKG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0Lmlu
dGVyc2VjdHModGlsZS5yZWN0KCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
dGlsZXNUb1BhaW50LnByZXBlbmQoJnRpbGUpOwotICAgIH0KLQotICAgIC8vIFRPRE86IFdoZW4g
dGhlIFRleHR1cmVNYXBwZXIgbWFrZXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHNvbWUgZWRnZXMg
ZXhwb3NlZCBhbmQgbm8gZWRnZXMKLSAgICAvLyBleHBvc2VkLCB0aGUgdmFsdWUgcGFzc2VkIHNo
b3VsZCBiZSBhbiBhY2N1cmF0ZSByZWZsZWN0aW9uIG9mIHRoZSB0aWxlIHN1YnNldCB0aGF0IHdl
IGFyZQotICAgIC8vIHBhc3NpbmcuIEZvciBub3cgd2UganVzdCAiZXN0aW1hdGUiIHNpbmNlIExh
eWVyQmFja2luZ1N0b3JlIGRvZXNuJ3Qga2VlcCBpbmZvcm1hdGlvbiBhYm91dAotICAgIC8vIHRo
ZSB0b3RhbCB0aWxlZCBzdXJmYWNlIHJlY3QgYXQgdGhlIG1vbWVudC4KLSAgICB1bnNpZ25lZCBl
ZGdlc0V4cG9zZWQgPSBtX3RpbGVzLnNpemUoKSA+IDEgPyBUZXh0dXJlTWFwcGVyOjpOb0VkZ2Vz
IDogVGV4dHVyZU1hcHBlcjo6QWxsRWRnZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
aWxlc1RvUGFpbnQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4dHVyZU1hcHBlclRpbGUqIHRp
bGUgPSB0aWxlc1RvUGFpbnRbaV07Ci0gICAgICAgIHRpbGUtPnBhaW50KHRleHR1cmVNYXBwZXIs
IHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgZWRnZXNFeHBvc2VkKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgc2hvdWxkRGVidWcgPSBzaG91bGRTaG93VGlsZURlYnVnVmlzdWFscygpOwotICAgICAg
ICBpZiAoIXNob3VsZERlYnVnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdGV4
dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihDb2xvcigweEZGLCAwLCAwKSwgMiwgdGlsZS0+cmVjdCgp
LCB0cmFuc2Zvcm0pOwotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3UmVwYWludENvdW50ZXIo
c3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmVUaWxlKj4odGlsZSktPnJlcGFpbnRDb3VudCgp
LCA4LCB0aWxlc1RvUGFpbnRbaV0tPnJlY3QoKS5sb2NhdGlvbigpLCB0cmFuc2Zvcm0pOwotICAg
IH0KLX0KLQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4
dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBWZWN0b3I8aW50Pjo6aXRlcmF0b3Ig
dGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQoKTsKLSAgICBmb3IgKFZlY3Rv
cjxpbnQ+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1JlbW92ZS5iZWdpbigpOyBpdCAhPSB0aWxl
c1RvUmVtb3ZlRW5kOyArK2l0KQotICAgICAgICBtX3RpbGVzLnJlbW92ZSgqaXQpOwotICAgIG1f
dGlsZXNUb1JlbW92ZS5jbGVhcigpOwotCi0gICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0
b3JlVGlsZT46Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKEhh
c2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQuc3dhcEJ1
ZmZlcnModGV4dHVyZU1hcHBlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0
b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGY1MTNhMDViODkxMzk4MDkz
ZTY3YWJmNTExOTNhMWE5NmU1MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgTGF5ZXJCYWNraW5nU3RvcmVfaAotI2RlZmlu
ZSBMYXllckJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLQot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7Ci0KLWNsYXNzIExheWVyQmFja2luZ1N0b3JlVGls
ZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZSB7Ci1wdWJsaWM6Ci0gICAgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKLSAgICAgICAgOiBUZXh0dXJlTWFw
cGVyVGlsZShXZWJDb3JlOjpGbG9hdFJlY3QoKSkKLSAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQot
ICAgICAgICAsIG1fcmVwYWludENvdW50KDApCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBm
bG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLSAgICBpbmxpbmUgdm9pZCBp
bmNyZW1lbnRSZXBhaW50Q291bnQoKSB7ICsrbV9yZXBhaW50Q291bnQ7IH0KLSAgICBpbmxpbmUg
aW50IHJlcGFpbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludENvdW50OyB9Ci0gICAg
dm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBzZXRC
YWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBidWZmZXIsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG1fc3Vy
ZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdGFyZ2V0UmVjdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N1cmZhY2VPZmZz
ZXQ7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLSAgICBpbnQgbV9yZXBhaW50Q291bnQ7Ci19OwotCi1j
bGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlIHsKLXB1YmxpYzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUoaW50LCBmbG9hdCk7Ci0g
ICAgdm9pZCByZW1vdmVUaWxlKGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKGludCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZVN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucyhX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBU
ZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJl
TWFwcGVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlKik7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJCYWNraW5nU3RvcmUoKQotICAg
ICAgICA6IG1fc2NhbGUoMS4pCi0gICAgeyB9Ci0gICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2lu
Z1N0b3JlVGlsZT4gbV90aWxlczsKLSAgICBWZWN0b3I8aW50PiBtX3RpbGVzVG9SZW1vdmU7Ci0g
ICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmCi0K
LSNlbmRpZiAvLyBMYXllckJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCmluZGV4IDE3ZDU0OTNi
MGFiM2FlOTQ4NGM0YmFiMDhmZDdmOGFiNTNiYWNmNzQuLjRmNDhjN2E0NGY2MTdmNzU0NGE0YjY3
YTBlOWY4MTA4ZmZkODM5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC0yNiw2ICsyNiw3IEBAIElOQ0xV
REVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0FQSS9jcHAvcXQgXAogICAg
ICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQVBJL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9j
ZXNzL0F1dGhlbnRpY2F0aW9uIFwKKyAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvRG93bmxvYWRzIFwKICAg
ICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlciBcCiAgICAgJCRTT1VSQ0Vf
RElSL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQgXApAQCAtNTgsNyArNTksNyBAQCBJTkNM
VURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQg
XAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0IFwKICAgICAk
JFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKLSAgICAkJFNPVVJDRV9ESVIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yIFwKKyAgICAkJFNPVVJDRV9ESVIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9X
ZWJQcm9jZXNzL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJvY2VzcwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKaW5kZXggM2FmNTk2NjI2YjE4ZTQyMmYwZDE0YzBmMDBiNDQ2NmJjYTQz
MzFhMC4uYzdmYzlhN2I3MzE5MmNiZTlmMzJlY2M4ODcxZjMwY2MzMDkyNGY3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcApAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92
ZXMpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQW5p
bWF0aW9uKCkKIHsKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVIb3N0
KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ4OWU3NGFjYTYwNmNmMDAyZmFjYjk1NWMzNTdjZGJkZmVkNmMyYWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0wLDAgKzEsNzU4IEBACisvKgorIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcio+JiBsYXllckJ5SURNYXAoKQoreworICAgIHN0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQs
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKKyAgICByZXR1cm4gZ2xvYmFs
TWFwOworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBIYXNoTWFwPFdl
YkxheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1h
cCgpOworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CisgICAgaWYgKGl0ID09IHRhYmxlLmVuZCgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29uZDsKK30KKworc3RhdGlj
IFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJl
dHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+aWQoKSA6IDA7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0YXRl
KCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50
KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCit7CisgICAg
bV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAg
Y2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0ZXJz
KCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisjZW5kaWYK
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCkKK3sKKyAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCk7CisgICAgaWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSktPnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgp
Cit7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHNldFNob3VsZFVwZGF0ZVZpc2li
bGVSZWN0KCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IEdyYXBoaWNzTGF5
ZXIoY2xpZW50KQorICAgICwgbV9tYXNrVGFyZ2V0KDApCisgICAgLCBtX2luVXBkYXRlTW9kZShm
YWxzZSkKKyAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QodHJ1ZSkKKyAgICAsIG1fc2hv
dWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRydWUp
CisgICAgLCBtX2ZpeGVkVG9WaWV3cG9ydChmYWxzZSkKKyAgICAsIG1fY2FudmFzTmVlZHNEaXNw
bGF5KGZhbHNlKQorICAgICwgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKKyAg
ICAsIG1fY29udGVudHNTY2FsZSgxKQorICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCit7
CisgICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOworICAgIG1faWQgPSBuZXh0
TGF5ZXJJRCsrOworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKK30KKworQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKK3sKKyAg
ICBsYXllckJ5SURNYXAoKS5yZW1vdmUoaWQoKSk7CisKKyAgICBpZiAobV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAg
ICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsK
KyAgICB9CisgICAgd2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OndpbGxC
ZURlc3Ryb3llZCgpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCit7CisgICAgYm9v
bCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKKyAgICBpZiAoIW9r
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJl
bi5zaXplKCk7ICsraSkgeworICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNoaWxk
ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW5baV0pOworICAgICAgICBjaGls
ZC0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KTsKKyAgICAgICAgY2hpbGQtPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAg
ICB9CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKKyAgICB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdl
Q2hpbGRyZW4oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQoreworICAgIEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOworICAgIHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKGxheWVyKS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1f
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGls
ZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hh
bmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENo
aWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit7
CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7CisgICAg
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOworICAgIHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5l
d0NoaWxkKQoreworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xk
Q2hpbGQsIG5ld0NoaWxkKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihv
bGRDaGlsZCktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihuZXdDaGlsZCktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChtX0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkK
K3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAgcGFyZW50TGF5ZXItPmRp
ZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgp
OworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAo
cG9zaXRpb24oKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRQb3NpdGlvbihwKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBw
KQoreworICAgIGlmIChhbmNob3JQb2ludCgpID09IHApCisgICAgICAgIHJldHVybjsKKworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIGRpZENoYW5nZUdlb21ldHJ5
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisgICAgc2V0TmVl
ZHNEaXNwbGF5KCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+
c2V0U2l6ZShzaXplKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0KQoreworICAgIGlmICh0cmFuc2Zvcm0oKSA9PSB0KQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0
cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJh
bnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmIChjaGlsZHJl
blRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCit7
CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYik7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9v
bCBiKQoreworICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKKyAgICAgICAgcmV0dXJuOwor
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7CisgICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29u
dGVudChib29sIGIpCit7CisgICAgaWYgKGRyYXdzQ29udGVudCgpID09IGIpCisgICAgICAgIHJl
dHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYik7CisKKyAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQoreworICAgIGlmIChjb250ZW50c0FyZVZpc2libGUo
KSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNW
aXNpYmxlKGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKQoreworICAgIGlm
IChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9tYWlu
QmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxw
aGEoIWIpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGIpOworICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJp
bGl0eSgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJh
Y2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7
CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSBy
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qo
cik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBtX2ltYWdlOworICAgIHNldENvbnRlbnRzVG9JbWFnZSgwKTsKKyAgICBzZXRD
b250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0g
dHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVx
dWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9jYW52
YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICBtX2NhbnZhc05lZWRzRGlzcGxh
eSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3lu
Y1JlcXVpcmVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
bmV3RmlsdGVycykKK3sKKyAgICBpZiAoZmlsdGVycygpID09IG5ld0ZpbHRlcnMpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKKyAgICByZXR1cm4gR3JhcGhp
Y3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKK30KKyNlbmRpZgorCisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQor
eworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgaW50NjRf
dCBuZXdJRCA9IDA7CisgICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KSB7
CisgICAgICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJh
bWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFn
ZS4KKyAgICAgICAgbmV3SUQgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRv
cHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VC
YWNraW5nU3RvcmVJRCk7CisgICAgICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICAgICAg
aWYgKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgJiYgbmV3SUQgPT0gbV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBJZiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCBpcyBub3Qg
c2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJRC4KKyAgICAgICAgQVNT
RVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworICAgIH0KKworICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3Jl
SUQgPSBuZXdJRDsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIg
PT0gbWFza0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dE1hc2tMYXllcihsYXllcik7CisKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBsYXllci0+c2V0U2l6ZShzaXplKCkpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bGF5ZXIpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci0+c2V0Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXItPnNldE1hc2tUYXJnZXQodGhpcyk7CisgICAgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOworCit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRS
ZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIg
PT0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsYXllcikKKyAg
ICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOworCisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3Jl
KQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7
CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitXZWJMYXllcklEIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sg
PSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2st
PnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgaWYgKENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KHJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dC0+c3luY0ZpeGVkTGF5ZXJzKCk7CisKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXpl
KCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVj
dCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVyKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNDaGls
ZHJlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gZmFsc2U7
CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IGNoaWxkSURzOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRJRHMuYXBwZW5kKHRv
V2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOworfQorCisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNG
aWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7CisgICAgbV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNMYXllckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKK30K
KyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUo
KQoreworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhl
ZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmFuY2hv
clBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUg
PSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9y
bSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUg
PSBjb250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRl
bnRzUmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgp
OworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgp
OworICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVyKCkpOworICAg
IG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgbV9sYXll
ckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5mby5wYXJlbnQgPSB0b1dl
YkxheWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0aW9uKCk7Cisg
ICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJ
bmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOworICAgIG1fbGF5ZXJJ
bmZvLnNpemUgPSBzaXplKCk7CisgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3Jt
KCk7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNMYXllclN0YXRl
KG1faWQsIG1fbGF5ZXJJbmZvKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnN5bmNDYW52YXMoKQoreworICAgIGlmICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9jYW52YXNQbGF0Zm9ybUxheWVyKQorICAgICAgICByZXR1
cm47CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB1aW50MzJfdCBncmFwaGljc1N1
cmZhY2VUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRvR3JhcGhpY3NTdXJmYWNl
KCk7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9p
ZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJm
YWNlVG9rZW4pOworI2VuZGlmCisgICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSBmYWxzZTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVuc3VyZUltYWdlQmFja2luZ1N0b3Jl
KCkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fbGF5
ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7CisgICAg
Ly8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNr
aW5nU3RvcmVzLgorICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisgICAgY29tcHV0ZVRy
YW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4oKTsKKyAgICBzeW5jTGF5
ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBzeW5jRmlsdGVycygpOwor
I2VuZGlmCisgICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBzeW5jQ2FudmFzKCk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50
QmVnaW4oKQoreworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Um9vdExh
eWVyKGJvb2wgaXNSb290KQoreworICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290
OworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxv
YXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3Jl
KQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQodHJh
amVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxl
OworICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKK30KKworZmxvYXQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50c1NjYWxlKCkKK3sKKyAgICByZXR1cm4gc2hvdWxk
VXNlVGlsZWRCYWNraW5nU3RvcmUoKSA/IG1fY29udGVudHNTY2FsZSA6IDE7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkKK3sKKyAgICBp
ZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbWFpbkJh
Y2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEJldHdlZW4g
Y3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwK
KyAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBt
aWdodCByZXN1bHQgaW4KKyAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBv
bGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCisgICAgLy8gc29tZXRoaW5nIHJlcGxhY2Vz
IHRoZW0uCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5y
ZWxlYXNlKCk7CisKKyAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2lu
ZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9y
ZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7CisKKyAgICBjcmVhdGVCYWNraW5nU3RvcmUo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tpbmdTdG9y
ZSgpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2lu
Z1N0b3JlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOworICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFxdWUoKSk7
CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBw
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVjdCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQorCitib29sIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2luVXBkYXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+bGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCk7Cit9CisKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7CisgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6
ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpCit7CisgICAgcmV0dXJuICFz
ZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Cit9CisKK0ludFJlY3QgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkKK3sK
KyAgICBpZiAoIXNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkpCisgICAgICAgIHJldHVybiB0
aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOworCisgICAgLy8gTm9uLWludmVydGlibGUg
bGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmlu
ZWQoKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8v
IFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGlu
YXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgorICAgIC8v
IFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0
IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBxdWFkLAorICAgIC8vIHNvIGl0IG1pZ2h0IHNw
cmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1v
cmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0IG11bHRpcGxpZXIpLgorICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkuY2xh
bXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSkpOworfQorCitD
b2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3
aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKK30KKworUGFzc093blB0cjxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYg
aGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHJldHVybiBtX0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRl
bnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUs
IG9mZnNldCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVUaWxl
KGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXRSZWN0KQoreworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT51cGRhdGVU
aWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxlSUQpCit7CisgICAgbV9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJz
KCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS5jbGVhcigpOworICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luVXBkYXRlTW9kZSA9IHRydWU7CisgICAg
Ly8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAocmUpY3JlYXRlIHRoZSBtYWluIHRpbGVkIGJh
Y2tpbmcgc3RvcmUsIG9uY2Ugd2UKKyAgICAvLyBoYXZlIGEgcmVtb3RlIGNsaWVudCBhbmQgd2Ug
YXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8gdGhlIFVJIHByb2Nlc3MuCisgICAgaWYgKCFt
X21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworICAgIG1f
bWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKyAgICBtX2luVXBkYXRlTW9k
ZSA9IGZhbHNlOworCisgICAgLy8gVGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgaXMga2VwdCBh
cm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuCisgICAgLy8gcmVtb3ZpbmcgdGhlIGV4
aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUgbmV3IG9uZXMuIFRoZSBmaXJzdCB0aW1lCisg
ICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwgcGFpbnRlZCB3ZSByZW1vdmUgdGhlIHByZXZp
b3VzIGJhY2tpbmcgc3RvcmUuCisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZS0+dmlzaWJsZUFy
ZWFJc0NvdmVyZWQoKSkKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkK
K3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzQmFja2lu
Z1N0b3JlLmNsZWFyKCk7CisKKyAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCkgeworICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworICAgICAg
ICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKKyAgICB9CisKKyAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAg
IGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCA9PSBjbGllbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgIHJlcGxp
Y2EtPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOworICAgIGlmIChD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudChjbGllbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5z
aXplKCk7ICsraSkgeworICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAg
IGxheWVyLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKKyAgICB9
CisKKyAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIG9uIHRoZSBVSSBwcm9jZXNz
IGhlcmUgaWYgdGhlIHJlbW90ZSBjbGllbnQgaGFzIGNoYW5nZWQgb3IgaXMgcmVtb3ZlZC4KKyAg
ICBpZiAobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgcHVyZ2VC
YWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
LT5kZXRhY2hMYXllcih0aGlzKTsKKyAgICB9CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQgPSBjbGllbnQ7CisgICAgaWYgKGNsaWVudCkKKyAgICAgICAgY2xpZW50LT5hdHRh
Y2hMYXllcih0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVz
dFZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBt
X21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkK
K3sKKyAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7CisgICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7CisgICAgbV9sYXllclRyYW5zZm9y
bS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hv
clBvaW50KGFuY2hvclBvaW50KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXpl
KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7
CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5z
Zm9ybSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgp
ID8gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5tX2xheWVyVHJhbnNmb3Jt
LmNvbWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAg
Ly8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJlIHVzZWQgaW4gdGlsZWRCYWNraW5nU3Rv
cmVWaXNpYmxlUmVjdC4KKyAgICBhZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIGFkanVzdENvbnRl
bnRzU2NhbGUoKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRl
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQp
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCkKK3sK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShjcmVhdGVDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCit7CisgICAgaWYgKCFtX2xh
eWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZTBjNTdkZDUzZTQ0Y2RkODU1ZDAyODE0YjM1YTg1YWVhMzEwNGU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTAsMCArMSwyMDggQEAKKyAgICAvKgorIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisKKyNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRyYW5zZm9ybS5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9v
cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xp
ZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6
OkltYWdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUo
aW50NjRfdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklE
LCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNo
aWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpID0gMDsKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRpZgor
I2lmIFBMQVRGT1JNKFFUKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3Vy
ZmFjZVRva2VuKSA9IDA7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6
OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6
OkNvb3JkaW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIoKTsKKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NM
YXllci5oLgorICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIq
PiYpOworICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hp
bGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOworICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShH
cmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhH
cmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50
KCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBz
ZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKTsKKyAgICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKKyAgICB2b2lk
IHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CisgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7
CisgICAgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCk7CisgICAgdm9pZCBzZXRDb250ZW50
c09wYXF1ZShib29sKTsKKyAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKTsKKyAg
ICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOworICAgIHZv
aWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7CisgICAgdm9pZCBzZXRNYXNr
TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3Jh
cGhpY3NMYXllciopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBzZXRDb250ZW50
c05lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAg
dm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29sIHNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFJvb3RMYXllcihi
b29sKTsKKworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OworICAgIHN0YXRpYyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwor
ICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKKyAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBt
X2ltYWdlLmdldCgpOyB9CisKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0
dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9v
bCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQorCisgICAgR3JhcGhp
Y3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsgfQorICAg
IHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQg
PSBsYXllcjsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKKworICAgIC8vIFRp
bGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsK
KyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOwor
ICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7CisgICAg
dmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Owor
CisgICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOworICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5k
bGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgdm9pZCBzZXRDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
KyAgICB2b2lkIHN5bmNDaGlsZHJlbigpOworICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKKyNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmlsdGVycygpOworI2VuZGlmCisg
ICAgdm9pZCBzeW5jQ2FudmFzKCk7CisgICAgdm9pZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgp
OworCisgICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIGJvb2wgaXNSZWFkeUZvclRp
bGVCdWZmZXJTd2FwKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwor
ICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIHdpbGxCZURlc3Ryb3llZCgpOworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBtX2lkOworICAg
IFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIFJlZlB0cjxJbWFnZT4gbV9p
bWFnZTsKKyAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7CisgICAgRmxvYXRSZWN0IG1f
bmVlZHNEaXNwbGF5UmVjdDsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFu
c2Zvcm07CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDE7CisgICAgYm9vbCBtX3Nob3VsZFVw
ZGF0ZVZpc2libGVSZWN0OiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsK
KyAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5j
RmlsdGVyczogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICBib29sIG1f
Y2FudmFzTmVlZHNEaXNwbGF5IDogMTsKKworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKCk7CisgICAg
dm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOworICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgIHZvaWQgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
CisgICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7CisjZW5kaWYKKworICAgIHZvaWQgY3JlYXRl
QmFja2luZ1N0b3JlKCk7CisKKyAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRy
YW5zZm9ybXMoKTsKKyAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCk7CisgICAg
dm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CisgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRW
aXNpYmxlUmVjdCgpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycygpOworICAgIHZvaWQg
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50
c1NjYWxlKCk7CisKKyAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCog
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CisgICAgT3duUHRyPFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAgT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOworICAgIGZsb2F0IG1f
Y29udGVudHNTY2FsZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXI7
Cit9OworCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKEdyYXBoaWNzTGF5ZXIqKTsKKworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE2MjQ0ZTJkOWRkMGZjOTQxNjgxMmRjNmRmNmY3NDUwMDY2
ZmUzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKQEAgLTAsMCArMSwxMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworQ29vcmRpbmF0ZWRUaWxlOjpDb29yZGluYXRlZFRpbGUoQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29u
c3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisg
ICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3JlKQorICAgICwgbV9jb29y
ZGluYXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0KHRpbGVkQmFja2luZ1N0b3JlLT50
aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQorICAgICwgbV9JRCgwKQorICAg
ICwgbV9kaXJ0eVJlY3QobV9yZWN0KQoreworfQorCitDb29yZGluYXRlZFRpbGU6On5Db29yZGlu
YXRlZFRpbGUoKQoreworICAgIGlmIChtX0lEKQorICAgICAgICBtX2NsaWVudC0+cmVtb3ZlVGls
ZShtX0lEKTsKK30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzRGlydHkoKSBjb25zdAorewor
ICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworfQorCit2b2lkIENvb3JkaW5hdGVk
VGlsZTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVj
dCB0aWxlRGlydHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBp
ZiAodGlsZURpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGly
dHlSZWN0LnVuaXRlKHRpbGVEaXJ0eVJlY3QpOworfQorCitWZWN0b3I8SW50UmVjdD4gQ29vcmRp
bmF0ZWRUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKK3sKKyAgICBpZiAoIWlzRGlydHkoKSkKKyAg
ICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworCisgICAgU3VyZmFjZVVwZGF0ZUluZm8g
dXBkYXRlSW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQg
PSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRl
SW5mby5zdXJmYWNlSGFuZGxlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgIGlmICgh
Z3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0LngoKSwgLW1fZGlydHlSZWN0
LnkoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUobV90aWxlZEJhY2tp
bmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1Nj
YWxlKCkpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5n
U3RvcmVQYWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPm1h
cFRvQ29udGVudHMobV9kaXJ0eVJlY3QpKTsKKworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdCA9
IG1fZGlydHlSZWN0OworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3QueCgp
LCAtbV9yZWN0LnkoKSk7CisgICAgdXBkYXRlSW5mby5zY2FsZUZhY3RvciA9IG1fdGlsZWRCYWNr
aW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKTsKKyAgICBncmFwaGljc0NvbnRleHQucmVsZWFzZSgp
OworCisgICAgc3RhdGljIGludCBpZCA9IDA7CisgICAgaWYgKCFtX0lEKSB7CisgICAgICAgIG1f
SUQgPSArK2lkOworICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZv
LCBtX3JlY3QpOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lE
LCB1cGRhdGVJbmZvLCBtX3JlY3QpOworCisgICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7Cisg
ICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6
c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKK3sKKyAgICAvLyBIYW5kbGVkIGJ5IHRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQuCit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRUaWxlOjppc1JlYWR5VG9QYWlu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9JRDsKK30KKwordm9pZCBDb29yZGluYXRlZFRp
bGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDb29yZGluYXRlZFRpbGU6
OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcmVjdCA9IEludFJlY3Qo
bV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAgIG1fZGlydHlSZWN0ID0gbV9yZWN0Owor
fQorCitDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3Jk
aW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQor
CitQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0
ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25z
dCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICByZXR1
cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0
aWxlQ29vcmRpbmF0ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFpbnRD
aGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVT
RShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGQxMTM0ZjA0MmU5ZjUyZTAzZmNiNDEyYzAzZDMzN2E2
NDU3OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRUaWxlX2gK
KyNkZWZpbmUgQ29vcmRpbmF0ZWRUaWxlX2gKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JF
KQorCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgorI2luY2x1ZGUgIlRpbGUuaCIKKyNp
bmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIFRpbGVk
QmFja2luZ1N0b3JlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29vcmRpbmF0
ZWRUaWxlQ2xpZW50OworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CisKK2NsYXNzIENvb3JkaW5h
dGVkVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0
ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFRpbGUo
Y2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsgfQorICAgIH5Db29y
ZGluYXRlZFRpbGUoKTsKKworICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworICAgIHZvaWQgaW52
YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgVmVjdG9yPFdlYkNvcmU6Oklu
dFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9u
dCgpOworICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKKyAgICB2b2lkIHBhaW50KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKworICAg
IGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5h
dGU7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZWN0OyB9CisgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOworCitw
cml2YXRlOgorICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqLCBXZWJD
b3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKKworICAgIENvb3Jk
aW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7CisgICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisKKyAgICBpbnQgbV9JRDsKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1fZGlydHlSZWN0OworCisgICAgT3duUHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
PiBtX2xvY2FsQnVmZmVyOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFRpbGVDbGllbnQoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRp
bGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpID0g
MDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6
OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0
ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlQmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KSB7IHJldHVy
biBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGllbnQpKTsgfQorICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKKyAgICB2b2lkIHBhaW50
Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChDb29y
ZGluYXRlZFRpbGVDbGllbnQqKTsKKyAgICBDb29yZGluYXRlZFRpbGVDbGllbnQqIG1fY2xpZW50
OworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTM1YjdmNWM0MDM2ZDhlYWFkMWEwMzM3MDhjODNhOGIxMWE1ZDgxYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDYwOSBAQAorICAgIC8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
IgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJW
aWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8TGF5ZXJUcmVlQ29v
cmRpbmF0b3I+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yKHdlYlBhZ2Up
KTsKK30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6On5MYXllclRyZWVDb29yZGluYXRvcigpCit7
CisgICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4g
ZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQu
CisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdpc3Rl
cmVkTGF5ZXJzOworICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMp
OworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXRDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Cit9CisKK0xheWVyVHJlZUNvb3JkaW5hdG9y
OjpMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVl
SG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFs
c2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1fd2FpdGluZ0ZvclVJUHJvY2Vzcyh0
cnVlKQorICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKKyAgICAsIG1fY29udGVudHNTY2FsZSgx
KQorICAgICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUodHJ1ZSkKKyAgICAsIG1f
c2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5jUm9vdExheWVyKHRydWUp
CisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVlQ29vcmRpbmF0b3I6Omxh
eWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
dHJ1ZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogd2ViUm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIu
Z2V0KCkpOworICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVyKHRydWUpOworI2lmbmRlZiBO
REVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igcm9v
dCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxz
ZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworICAgIG1f
bGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
d2ViUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dCh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBub24tY29tcG9zaXRlZCBjb250ZW50Iik7
CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQ
YWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdlLT5oYXNQYWdlT3Zlcmxh
eSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxh
eWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5
ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGlu
Z0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVk
TGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkKK3sKKyAgICBt
X25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRy
YXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4K
KyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKwor
ICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0gbnVsbHB0cjsKKyAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0Tm9u
Q29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCkKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY3JvbGxOb25D
b21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIHNldE5vbkNvbXBvc2l0
ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQoreworICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZv
ciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2Fp
dGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgorICAgIC8vIEluc3RlYWQgd2Ug
YXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhh
dmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCisgICAg
c3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVy
IGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBl
eHBlY3RlZCBmbHVzaC4KKyAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVIb3N0
Q0EuCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFu
Z2VzKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVEaWRDaGFuZ2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV9yb290TGF5ZXItPnNp
emUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllci0+c2V0
U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9zZXMgbmV3IGFyZWFz
IG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNwbGF5IGlzIG5lZWRl
ZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgorICAgIEZsb2F0U2l6ZSBv
bGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgaWYgKG5ld1Np
emUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBmbG9hdCBoZWlnaHQgPSBz
dGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSksIG9sZFNpemUuaGVp
Z2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdTaXplLndpZHRoKCkg
LSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAgIGlmIChuZXdTaXplLmhl
aWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9sZFNpemUuaGVpZ2h0
KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNpemUuaGVpZ2h0KCkp
KTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlM
YXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKQorewor
ICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXko
KQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5TmVl
ZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKG1f
cGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnNldE9wYWNpdHkodmFsdWUpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29s
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUlu
Y2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgaWYgKG1fcGFnZU92ZXJs
YXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChtX3Nob3VsZFN5bmNSb290TGF5ZXIp
IHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9zaG91bGRTeW5jUm9vdExh
eWVyID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3Nob3VsZFN5bmNGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIGRpZFN5bmM7CisKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOworICAgIG1fd2FpdGluZ0Zv
clVJUHJvY2VzcyA9IHRydWU7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJT
dGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGluZm8pCit7CisgICAgaWYg
KG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgbV9z
aG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8p
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyQ2hpbGRyZW4oV2Vi
TGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZHJlbikKK3sKKyAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQs
IGNoaWxkcmVuKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52YXMo
V2ViTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhp
Y3NTdXJmYWNlVG9rZW4pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U3luY0Nh
bnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKK30KKworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckZp
bHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVy
cyhpZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmF0dGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgQVNT
RVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKKyAgICBtX3JlZ2lzdGVy
ZWRMYXllcnMuYWRkKGxheWVyKTsKKworICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29u
dGVudHNTY2FsZSk7CisgICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7CisgICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+
aWQoKSkpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxm
KFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11
c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5n
ID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigp
LT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
cmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRl
ckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNv
bnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFy
ZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAgICBncmFwaGljc0xheWVy
LT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKKworICAgIGlmIChy
ZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAocmVuZGVyTGF5
ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxh
eWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc0Zp
eGVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllciogcm9vdFJl
bmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNv
bXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJMYXll
cik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQo
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nl
c3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIGlm
ICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZmx1c2hQZW5kaW5nTGF5
ZXJDaGFuZ2VzKCkpCisgICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUoKQoreworI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBh
bmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZvcmUgd2UgZmx1c2ggdGhl
IGxheWVycy4KKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCkt
PnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChj
dXJyZW50VGltZSgpKSk7CisjZW5kaWYKKworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQo
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxlZExh
eWVyRmx1c2goKQoreworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkg
eworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdp
bmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgICAgICBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29vcmRp
bmF0b3I+KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBB
U1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92
ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3IgcGFnZSBvdmVybGF5IGNv
bnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6
ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIuZ2V0
KCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJsYXlM
YXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3Zl
cmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0g
bnVsbHB0cjsKK30KKworaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFnZUJh
Y2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkgPSAwOworCisjaWYgUExB
VEZPUk0oUVQpCisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworCisgICAgaWYgKCFuYXRpdmVJbWFnZSkKKyAgICAgICAgcmV0dXJu
IEludmFsaWRXZWJMYXllcklEOworCisgICAga2V5ID0gbmF0aXZlSW1hZ2UtPmNhY2hlS2V5KCk7
CisjZW5kaWYKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBtX2Rp
cmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKKworICAgIGlmIChpdCAh
PSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7CisgICAgICAgICsr
KGl0LT5zZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0KKworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAgICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKKyAgICB9CisKKyAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFwLT5jcmVhdGVIYW5kbGUo
aGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7Cisg
ICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKKyAgICBy
ZXR1cm4ga2V5OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1hZ2VC
YWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkpCisgICAgICAgIHJldHVy
bjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZXN0
cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwordm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmIChncmFwaGljc0xheWVy
ID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPmRy
YXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7CisgICAg
ICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNs
ZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBo
ZXJlLgorICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKKyAgICAg
ICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0RlYnVn
Qm9yZGVycygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaG93UmVwYWludENv
dW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVyKCk7
Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0
KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlVw
ZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8p
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQorCitXZWJDb3JlOjpJbnRS
ZWN0IExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGZs
b2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGJv
b2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1JlY3Q7
CisgICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50c1Nj
YWxlOworCisgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQgdGls
ZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KKyAgICB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5zZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlWZWN0b3IpOworCisg
ICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlKSB7
CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CisgICAgICAgIG1fY29udGVu
dHNTY2FsZSA9IHNjYWxlOworCisgICAgICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsK
KyAgICAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+
OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQorICAgICAgICAg
ICAgICAgICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChj
b250ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2li
bGVSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICBtX3dlYlBhZ2Ut
PnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlmIChjb250ZW50c1JlY3RE
aWRDaGFuZ2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1
ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBzY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJh
bWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNp
emUoKTsgKytpKQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlkU3dhcEJ1ZmZlcnMoKTsK
K30KKworYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0Zv
clVJUHJvY2VzczsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKK3sKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9
IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgq
aXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigp
OworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
LCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
IGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMm
IGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOworICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9
PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJl
IGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBv
ZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7CisgICAg
bV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9u
LCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRp
bmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ5NDZkYjAxZTA2YzRlN2I1M2IxMmI4MWY3ZDQ0MjVh
ZTZkNjk0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKQEAgLTAsMCAr
MSwxNDQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JfaAorI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9oCisKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVXBk
YXRlQXRsYXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBVcGRh
dGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3IgOiBw
dWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRv
cj4gY3JlYXRlKFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29yZGluYXRvcigp
OworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CisK
KyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7
IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2No
ZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFs
bFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5
KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5
KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVu
UGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBh
dXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXll
ckZsdXNoKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uo
KSB7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3Jl
OjpJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50
NjRfdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25z
dCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlEKTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOworCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkxheWVy
SUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGls
ZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisgICAgdmlydHVh
bCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOworCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50
VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBT
aGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24o
KSBPVkVSUklERTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3IoV2ViUGFnZSopOworCitwcml2YXRlOgorICAgIC8vIEdyYXBoaWNzTGF5ZXJD
bGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZpcnR1
YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFz
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAgIHZpcnR1YWwgYm9vbCBz
aG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKSBjb25zdDsKKworICAgIC8vIExheWVyVHJlZUNvb3JkaW5hdG9yCisgICAgdm9pZCBj
cmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXll
cigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1
c2goKTsKKyAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9p
ZCBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5v
bi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkg
bGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3ZlcmxheS4KKyAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOworCisgICAgSGFz
aFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXll
cnM7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHM7CisgICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyAg
ICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworICAgIGJvb2wgbV9pc1Zh
bGlkOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CisgICAgYm9vbCBtX2lzU3Vz
cGVuZGVkOworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAg
IGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0
aW9uVXBkYXRlOworCisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Cisg
ICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXll
cjsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJl
ZUNvb3JkaW5hdG9yPiopOworICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiBtX2xheWVyRmx1c2hUaW1lcjsKKyAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkOworfTsKKworfQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjljMmFjZGY4ZjgzMGNlYmM4YjE2ZmJhZDM5ZmZlZjc3
ZGIwNTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4K
QEAgLTAsMCArMSwyNyBAQAorIworIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjCisjICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisjICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisjICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorIworIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKworCisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgeworICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxl
Q29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5
VmVjdG9yeSkKKyAgICBSZW5kZXJOZXh0RnJhbWUoKQorICAgIFB1cmdlQmFja2luZ1N0b3Jlcygp
Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhLmgKaW5kZXggNzFhYTYwN2NiNWU4Zjc0OGUyYmZlMTM2NjkxOGY2OWNjZWE2MWMwZC4u
NzU5ZTY3NWFkNjQ4OTg4MmJmMTdiNjAxNTQyNTEyYWM0MDljNTliNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTkwLDcgKzkwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJTeW5j
KCkgPSAwOwogI2VuZGlmCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRy
ZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOwogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAK
aW5kZXggNWU2ZDVlYzBhMDdjOGY2NjNkNDlkMzgwYTVjNzBmZDE2YTdkODM2YS4uOGVjZDllMjUx
MzYxYTNiYTUwODI4NDRmOGIwYzAxM2QyM2IwMDA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKQEAgLTY4OCw3ICs2
ODgsNyBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQogICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKIH0KIAotI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIHZvaWQgRHJhd2luZ0Fy
ZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJ
UEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIGlmIChtX2xheWVyVHJlZUhv
c3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmgKaW5kZXggMmNlYmJkNWM0Y2Y0MWQyNjk2Yzg5NGYxN2M3MmI0MzBjNThmNWRiYy4u
NTVlM2RmNDg0MDBmNzE4NDU4OWE5OWIxYTk0Zjg3YjdkYjc1MGI0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtNzcs
NyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2Rl
KHVpbnQzMl90KSBPVkVSUklERTsKICNlbmRpZgogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJ
TkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJlNTEwMDBhNWUxMjg3YzhkNzJm
ZjYxOTZhZTkwYzNmMDYxZDg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29y
ZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2MDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0K
LSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUlELmgiCi0j
aW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiV2ViUGFn
ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLVBhc3NSZWZQdHI8TGF5
ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUoV2ViUGFnZSog
d2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUNvb3JkaW5hdG9y
KHdlYlBhZ2UpKTsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6On5MYXllclRyZWVDb29yZGlu
YXRvcigpCi17Ci0gICAgLy8gUHJldmVudCBzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+
IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0
LgotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXll
cnM7Ci0gICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7Ci0KLSAg
ICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVn
aXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhp
Y3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudCgwKTsK
LX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2Uq
IHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0gICAgLCBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNWYWxpZCh0cnVlKQotICAg
ICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNl
KQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBt
X3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMs
ICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCi0gICAgLCBtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQotewotICAgIC8vIENyZWF0ZSBhIHJvb3Qg
bGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0g
ICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKG1f
cm9vdExheWVyLmdldCgpKTsKLSAgICB3ZWJSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3Jk
aW5hdG9yIHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgp
KTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRvV2ViR3JhcGhpY3NMYXll
cih3ZWJSb290TGF5ZXIpLT5pZCgpOwotCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllciht
X3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQodGhpcyk7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmFtZSgiTGF5
ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOwotI2VuZGlmCi0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
LQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKLSAgICAgICAg
Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQotewotICAgIGlmIChtX2xheWVyRmx1c2hT
Y2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBsYXllckZsdXNoaW5nRW5h
YmxlZDsKLQotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkgewotICAgICAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNh
bmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKCFtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2xheWVyRmx1c2hUaW1lci5p
c0FjdGl2ZSgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCkK
LXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9v
bCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi17Ci0gICAgbV9ub3RpZnlBZnRlclNj
aGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQo
KSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKTsKLQotICAgIC8v
IEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHkuCi0gICAgaWYgKGdyYXBo
aWNzTGF5ZXIpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQo
Z3JhcGhpY3NMYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmludmFsaWRh
dGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0KLSAgICBBU1NFUlQobV9p
c1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAgbV9pc1ZhbGlkID0gZmFs
c2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldE5vbkNvbXBvc2l0ZWRDb250
ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0gICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9y
Y2VSZXBhaW50KCkKLXsKLSAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlv
dXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQ
cm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KLSAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdn
ZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRl
ZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAgIHN5bmNEaXNwbGF5U3Rh
dGUoKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3
aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2gu
Ci0gICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIG5ld1NpemUpCi17Ci0gICAgaWYgKG1fcm9vdExheWVyLT5zaXplKCkgPT0gbmV3U2l6
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7
Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNv
bXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVkZWQKLSAgICAvLyBmb3Ig
dGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdTaXplLndpZHRoKCkgPiBv
bGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RkOjptaW4oc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0
aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdodCgpLCBuZXdTaXplLndp
ZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgpKSk7Ci0KLSAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUo
bmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBjcmVhdGVQYWdl
T3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsKLSAgICBkZXN0
cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5
ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCi17Ci0gICAgQVNTRVJUKG1f
cGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRPcGFjaXR5KHZh
bHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9vbCBMYXllclRyZWVDb29y
ZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IGZhbHNlOwotICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFt
ZXMoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAg
ICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7Ci0KLSAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVyKSB7Ci0gICAgICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQotICAgICAgICByZXR1cm4gZGlkU3luYzsKLQot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
RGlkUmVuZGVyRnJhbWUoKSk7Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNv
bnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9z
aXRpb25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250
ZW50c1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlv
blVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJ
bnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBn
cmFwaGljc1N1cmZhY2VUb2tlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6YXR0YWNoTGF5ZXIoV2ViR3JhcGhp
Y3NMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFp
bnMobGF5ZXIpKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKLQotICAgIGxh
eWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVz
dFZpc2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExh
eWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIG1fcmVnaXN0ZXJlZExheWVycy5y
ZW1vdmUobGF5ZXIpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8g
VGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFi
YWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24o
KSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKLSAgICBncmFwaGljc0xh
eWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9m
ZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAg
ICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlm
IChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmll
d3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVy
TGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZv
ckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKLXsKLSAgICBpZiAoIW1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhh
c0ZpeGVkT2JqZWN0cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogcm9v
dFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCkt
PmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Ci0gICAgQVNTRVJUKHJvb3RSZW5kZXJM
YXllcik7Ci0gICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1
cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hp
bGQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCkKLXsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVBy
b2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKLQotICAg
IGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3RhdGUoKQotewot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZ
X01PTklUT1IpCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJl
ZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZvcmUgd2UgZmx1c2gg
dGhlIGxheWVycy4KLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFt
cChjdXJyZW50VGltZSgpKSk7Ci0jZW5kaWYKLQotICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVk
ZWQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9ybVNjaGVkdWxl
ZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCkgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRy
YXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAgICBtX25vdGlm
eUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5ZXJUcmVlQ29v
cmRpbmF0b3I+KikKLXsKLSAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAg
ICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7Ci0KLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIg
PSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcGFn
ZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3IgcGFnZSBvdmVybGF5
IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+
c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VPdmVybGF5TGF5ZXIu
Z2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0cm95UGFnZU92ZXJs
YXlMYXllcigpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVy
ID0gbnVsbHB0cjsKLX0KLQotaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBrZXkgPSAwOwotCi0jaWYg
UExBVEZPUk0oUVQpCi0gICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJbWFnZSkKLSAgICAgICAgcmV0
dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0aXZlSW1hZ2UtPmNhY2hlS2V5
KCk7Ci0jZW5kaWYKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRlcmF0b3IgaXQgPSBt
X2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsKLQotICAgIGlmIChp
dCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgpKSB7Ci0gICAgICAg
ICsrKGl0LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLQotICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKLSAgICB7Ci0gICAgICAgIE93blB0cjxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsKLSAgICB9Ci0KLSAg
ICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgYml0bWFwLT5jcmVhdGVIYW5k
bGUoaGFuZGxlKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtleSwgaGFuZGxlKSk7
Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQoa2V5LCAxKTsKLSAg
ICByZXR1cm4ga2V5OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW1h
Z2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCi17Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ID09IG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGl0LT5zZWNvbmQtLTsKLQotICAgIGlmIChpdC0+c2Vjb25kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJlbW92ZShpdCk7Ci0g
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpE
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Ci19Ci0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiwgZG91YmxlIHRpbWUpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQotewotICAgIGlmIChncmFwaGljc0xh
eWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgewotICAgICAgICBtX3dlYlBhZ2Ut
PmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0g
ICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0
IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBp
dCBoZXJlLgotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAg
ICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd0Rl
YnVnQm9yZGVycygpOwotfQotCi1ib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaG93UmVwYWlu
dENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1JlcGFpbnRDb3VudGVy
KCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRS
ZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVRpbGVGb3JMYXll
cihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUlu
Zm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlVGlsZShXZWJMYXll
cklEIGxheWVySUQsIGludCB0aWxlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwotfQotCi1XZWJDb3JlOjpJ
bnRSZWN0IExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAg
IGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0gICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUgIT0gbV9jb250ZW50
c1NjYWxlOwotCi0gICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5kaWNhdGVzIHRoYXQg
dGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4KLSAgICB0b1dlYkdy
YXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJs
ZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLQotICAgIGlm
IChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5nZSkgewotICAg
ICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAgICAgICBtX2NvbnRlbnRzU2Nh
bGUgPSBzY2FsZTsKLQotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgICAgICBmb3Ig
KEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVn
aXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlm
IChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQotICAgICAgICAgICAgICAgICgqaXQpLT5zZXRDb250
ZW50c1NjYWxlKHNjYWxlKTsKLSAgICAgICAgICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2Up
Ci0gICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBpZiAobV93ZWJQYWdlLT51
c2VGaXhlZExheW91dCgpKQotICAgICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRl
bnRSZWN0KHJlY3QpOwotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgIG1f
c2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKLX0KLQotI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVBbmlt
YXRpb24oKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotI2VuZGlmCi0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgbV93YWl0aW5n
Rm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
dXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOwotfQotCi1ib29sIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAotewotICAgIHJl
dHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewotICAgIEhhc2hT
ZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVy
ZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBBU1NF
UlQoIW1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuc2l6ZSgpKTsKLSAgICBtX3Vw
ZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFncyBmbGFncywgU2hhcmVh
YmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCi17
Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0Owot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIFVwZGF0ZUF0bGFzJiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXTsKLSAgICAgICAg
aWYgKGF0bGFzLmZsYWdzKCkgPT0gZmxhZ3MpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBy
ZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVyIHNwYWNlLgotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMuYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVm
ZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChncmFwaGljc0NvbnRl
eHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1l
bnNpb24gPSAyMDAwOwotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoVXBkYXRlQXRsYXMoU2Ny
YXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKLSAgICByZXR1cm4gbV91cGRhdGVBdGxhc2Vz
Lmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZz
ZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29y
ZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNv
b3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM0MDZlNDViOTM1MWYxZjU4NTg1NGMwOGI5MjZiNDU5YWE3MDZhMjkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRvcl9oCi0jZGVmaW5lIExheWVyVHJlZUNvb3JkaW5h
dG9yX2gKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRy
ZWVIb3N0LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgot
I2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1jbGFzcyBVcGRhdGVJbmZvOwotY2xhc3MgV2ViUGFnZTsKLQotY2xhc3MgTGF5ZXJU
cmVlQ29vcmRpbmF0b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViR3JhcGhp
Y3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVl
Q29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+TGF5ZXJUcmVlQ29v
cmRpbmF0b3IoKTsKLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVhbCB2b2lk
IHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRD
b250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Ci0gICAg
dmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwgdm9pZCBzaXplRGlkQ2hh
bmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOwotCi0gICAgdmlydHVhbCB2b2lk
IGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRVbmluc3RhbGxQ
YWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVy
bGF5T3BhY2l0eShmbG9hdCk7Ci0gICAgdmlydHVhbCBib29sIHBhZ2VPdmVybGF5U2hvdWxkQXBw
bHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1
YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gZmFsc2U7IHNj
aGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRldmljZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0SW1hZ2VCYWNraW5nU3Rv
cmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2lu
Z1N0b3JlKGludDY0X3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCk7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRl
c0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5h
dG9yTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0
ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7Ci0j
aWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJz
KFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSNlbmRpZgot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXll
ciopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwotCi0gICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzLCBTaGFyZWFi
bGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOwotI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJS
SURFOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGlu
YXRvcihXZWJQYWdlKik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNS
ZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1
Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
IGNvbnN0OwotCi0gICAgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3IKLSAgICB2b2lkIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0g
ICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwot
ICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIHN5bmNE
aXNwbGF5U3RhdGUoKTsKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jv
b3RMYXllcjsKLQotICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBv
c2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyOwotCi0gICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4g
V2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgotICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7Ci0KLSAgICBIYXNoU2V0PFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgSGFzaE1h
cDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7Ci0gICAg
VmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3VwZGF0ZUF0bGFzZXM7Ci0KLSAgICBib29sIG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotICAgIGJvb2wgbV9pc1ZhbGlkOwotCi0gICAgYm9v
bCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdl
YkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGZsb2F0IG1fY29udGVu
dHNTY2FsZTsKLSAgICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlOwotCi0g
ICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAgYm9vbCBtX3Nob3Vs
ZFN5bmNGcmFtZTsKLSAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXllcjsKLSAgICB2b2lkIGxh
eWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiop
OwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBtX2xheWVyRmx1c2hU
aW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwotfTsKLQotfQot
Ci0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNv
b3JkaW5hdG9yLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmY2Zjk2YWRiNmE1MWZiNTNhMjdhNTE2ZWMx
ZmUwZTVkMzhmMjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDI3
ICswLDAgQEAKLSMKLSMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSMKLSMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0jICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0KLQotI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQotbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3IgewotICAg
IFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVudHNS
ZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkK
LSAgICBSZW5kZXJOZXh0RnJhbWUoKQotICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCi19Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxNjk3ZmUyNTIwNDQyZTdhZGJhOWUwZGIy
MzQ4ZjhiN2ViYjFmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTggKzAsMCBAQAot
LyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIldlYkdyYXBoaWNz
TGF5ZXIuaCIKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1
ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGlj
c0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCi17Ci0gICAgc3RhdGljIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKLSAgICByZXR1cm4gZ2xvYmFsTWFwOwot
fQotCi1XZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0
OjpXZWJMYXllcklEIGlkKQotewotICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NM
YXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOwotICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwg
V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZpbmQoaWQpOwotICAgIGlm
IChpdCA9PSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0LT5z
ZWNvbmQ7Ci19Ci0KLXN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJRChHcmFwaGljc0xheWVy
KiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5pZCgpIDogMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0
YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0K
LXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4oKQotewotICAgIG1fc2hv
dWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVu
dCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQotewotICAgIG1f
c2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdy
YXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIXRy
YW5zZm9ybSgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVuKClb
aV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotICAgIGlmIChyZXBsaWNhTGF5ZXIo
KSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIHNldFNob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5ZXI6OldlYkdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDogR3JhcGhpY3NMYXllcihj
bGllbnQpCi0gICAgLCBtX21hc2tUYXJnZXQoMCkKLSAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNl
KQotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQotICAgICwgbV9zaG91bGRT
eW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKLSAg
ICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXko
ZmFsc2UpCi0gICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkKLSAgICAsIG1fY29udGVu
dHNTY2FsZSgxKQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCi17Ci0gICAgc3RhdGlj
IFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1faWQgPSBuZXh0TGF5ZXJJRCsrOwot
ICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKLX0KLQotV2ViR3JhcGhpY3NMYXll
cjo6fldlYkdyYXBoaWNzTGF5ZXIoKQotewotICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgp
KTsKLQotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKLSAgICAgICAgcHVyZ2VC
YWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+ZGV0YWNo
TGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6
d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRy
ZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCi17Ci0gICAgYm9vbCBv
ayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLSAgICBpZiAoIW9rKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBjaGlsZCA9IHRvV2ViR3Jh
cGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5zZXRXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgICAgIGNoaWxkLT5kaWRD
aGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOwot
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5
ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5
ZXIsIGluZGV4KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGlj
c0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGlj
c0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxk
cmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGlj
c0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5
ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNs
aWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2li
bGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5n
KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xp
ZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxh
eWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19
Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9s
ZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsKLSAgICBib29sIG9rID0gR3JhcGhp
Y3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7Ci0gICAgaWYgKCFvaykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgdG9X
ZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIHRv
V2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93
ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobmV3Q2hpbGQp
LT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNz
TGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKLSAgICAg
ICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgR3JhcGhpY3NMYXllcjo6
cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCi17
Ci0gICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhp
Y3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
IHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0
cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0gICAgc2V0TmVlZHNEaXNw
bGF5KCk7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0U2l6
ZShzaXplKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAg
ICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
dCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYgKHByZXNlcnZlczNEKCkgPT0gYikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYik7
Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpz
ZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAgICBpZiAobWFza3NUb0JvdW5kcygpID09IGIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIp
OwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
c2V0RHJhd3NDb250ZW50KGJvb2wgYikKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikK
LSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsK
LQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQotewotICAgIGlmIChjb250ZW50c0FyZVZpc2li
bGUoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNWaXNpYmxlKGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikKLXsKLSAgICBpZiAoY29u
dGVudHNPcGFxdWUoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fbWFpbkJhY2tp
bmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFi
KTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShiKTsKLSAgICBkaWRDaGFu
Z2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VW
aXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmls
aXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKHRoaXMtPm9wYWNp
dHkoKSA9PSBvcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgcikKLXsK
LSAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgp
Ci17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0gICAgc2V0Q29udGVudHNU
b0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7Ci0gICAgbV9j
YW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xp
ZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCi17
Ci0gICAgbV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICBtX2NhbnZh
c05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQo
KS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIG5ld0ZpbHRlcnMpCi17Ci0gICAgaWYgKGZpbHRlcnMoKSA9PSBuZXdGaWx0ZXJzKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0gICAgcmV0dXJuIEdy
YXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCi17Ci0g
ICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQ2NF90IG5l
d0lEID0gMDsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0gICAgICAgIC8v
IFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdh
eSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBpbWFnZS4KLSAgICAgICAg
bmV3SUQgPSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNraW5nU3RvcmUo
aW1hZ2UpOwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJh
Y2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5n
U3RvcmVJRCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBz
dG9yZSBJRC4KLSAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
KTsKLSAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIH0KLQotICAgIG1fbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2ltYWdlID0gaW1hZ2U7Ci0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0g
ICAgaWYgKGxheWVyID09IG1hc2tMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFw
aGljc0xheWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKLSAgICBXZWJHcmFwaGlj
c0xheWVyKiB3ZWJHcmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKTsKLSAg
ICB3ZWJHcmFwaGljc0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudCk7Ci0gICAgd2ViR3JhcGhpY3NMYXllci0+c2V0TWFza1RhcmdldCh0aGlz
KTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotCi19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UmVw
bGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09
IHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAg
ICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQo
bV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxp
Y2F0ZWRCeUxheWVyKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUo
SW50UmVjdChyZWN0KSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi1XZWJMYXll
cklEIFdlYkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pZDsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b1dlYkdy
YXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiByZXBs
aWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGlj
YS0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3dlYkdy
YXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOwotCi0gICAgc3luY0NvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPnN5bmNDb21w
b3NpdGluZ1N0YXRlKHJlY3QpOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiB0b1dlYkdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YkdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8V2Vi
TGF5ZXJJRD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigp
LnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxk
cmVuKClbaV0pKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hp
bGRyZW4obV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5
bmNGaWx0ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IGZh
bHNlOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmlsdGVycyhtX2lk
LCBmaWx0ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0xh
eWVyU3RhdGUoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKLSAgICBtX2xheWVy
SW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKLQotICAgIG1fbGF5ZXJJ
bmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKLSAgICBtX2xheWVySW5mby5iYWNrZmFj
ZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKLSAgICBtX2xheWVySW5mby5jaGlsZHJl
blRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAgbV9sYXllckluZm8uY29udGVu
dHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzUmVj
dCA9IGNvbnRlbnRzUmVjdCgpOwotICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9IGRyYXdz
Q29udGVudCgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRlbnRzQXJl
VmlzaWJsZSgpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFza0xheWVy
KCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7Ci0g
ICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKLSAgICBtX2xheWVySW5mby5wYXJl
bnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOwotICAgIG1fbGF5ZXJJbmZvLnBvcyA9IHBvc2l0
aW9uKCk7Ci0gICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwotICAg
IG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkpOwotICAg
IG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7Ci0gICAgbV9sYXllckluZm8udHJhbnNmb3JtID0g
dHJhbnNmb3JtKCk7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJTdGF0
ZShtX2lkLCBtX2xheWVySW5mbyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3luY0Nh
bnZhcygpCi17Ci0gICAgaWYgKCFtX2NhbnZhc05lZWRzRGlzcGxheSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQot
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRv
a2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAg
ICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOwotI2Vu
ZGlmCi0gICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgaWYgKCFtX2ltYWdl
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gbV93ZWJHcmFw
aGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpCi17Ci0gICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVs
ZWFzZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgotICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3Jl
KCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICBzeW5jQ2hpbGRy
ZW4oKTsKLSAgICBzeW5jTGF5ZXJTdGF0ZSgpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAg
ICBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKLSAg
ICBzeW5jQ2FudmFzKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSb290
TGF5ZXIoYm9vbCBpc1Jvb3QpCi17Ci0gICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jv
b3Q7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2lu
dCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQotICAg
ICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQodHJhamVjdG9y
eVZlY3Rvcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNTY2FsZShm
bG9hdCBzY2FsZSkKLXsKLSAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICBhZGp1c3RD
b250ZW50c1NjYWxlKCk7Ci19Ci0KLWZsb2F0IFdlYkdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNv
bnRlbnRzU2NhbGUoKQotewotICAgIHJldHVybiBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgp
ID8gbV9jb250ZW50c1NjYWxlIDogMTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1
c3RDb250ZW50c1NjYWxlKCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3Rv
cmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3Jl
IGFuZCBwYWludGluZyB0aGUgY29udGVudCwKLSAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9w
IHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KLSAgICAvLyBicmllZmx5
IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3Jl
Ci0gICAgLy8gc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0gICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBObyByZWFzb24g
dG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMu
Ci0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7
Ci0KLSAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0
UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1
cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12b2lkIFdl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0
LCByZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBh
aW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQotewotfQotCi1ib29s
IFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25z
dAotewotICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0Fs
bG93ZWQoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRo
KCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2hvdWxk
VXNlVGlsZWRCYWNraW5nU3RvcmUoKQotewotICAgIHJldHVybiAhc2VsZk9yQW5jZXN0b3JIYXZl
Tm9uQWZmaW5lVHJhbnNmb3JtcygpOwotfQotCi1JbnRSZWN0IFdlYkdyYXBoaWNzTGF5ZXI6OnRp
bGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQotewotICAgIGlmICghc2hvdWxkVXNlVGlsZWRC
YWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KCk7Ci0KLSAgICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgot
ICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzSW52ZXJ0aWJsZSgpKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgLy8gUmV0dXJuIGEgcHJvamVjdGlvbiBvZiB0
aGUgdmlzaWJsZSByZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRvIHRoZSBsYXllcidzIHBs
YW5lIChsYXllciBjb29yZGluYXRlcykuCi0gICAgLy8gVGhlIHJlc3VsdGluZyBxdWFkIG1pZ2h0
IGJlIHNxdWV3ZWQgYW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0
aGlzIHF1YWQsCi0gICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRoZXIgdGhhbiB0aGUgcmVh
bCB2aXNpYmxlIGFyZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZpZWQgYnkgdGhlIGNvdmVy
IHJlY3QgbXVsdGlwbGllcikuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9sYXllclRy
YW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFk
KEZsb2F0UXVhZChGbG9hdFJlY3QobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT52aXNpYmxlQ29u
dGVudHNSZWN0KCkpKSkpOwotfQotCi1Db2xvciBXZWJHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tp
bmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbnRlbnRzT3Bh
cXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci19Ci0KLVBhc3NPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRl
bnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlU3VyZmFjZTo6
SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgcmV0dXJu
IG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRl
bnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhLCBoYW5kbGUs
IG9mZnNldCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZShpbnQgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUo
aWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRh
cmdldFJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRpbGUoaW50IHRp
bGVJRCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbW92ZVRpbGUoaWQoKSwg
dGlsZUlEKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVy
cygpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBtX21haW5CYWNraW5n
U3RvcmUuY2xlYXIoKTsKLSAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pblVwZGF0ZU1vZGUgPSB0cnVlOwotICAg
IC8vIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBi
YWNraW5nIHN0b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdl
IGFyZSByZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICgh
bV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLSAgICBt
X21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0gICAgbV9pblVwZGF0ZU1v
ZGUgPSBmYWxzZTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlzIGtlcHQg
YXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8vIHJlbW92aW5nIHRoZSBl
eGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3QgdGltZQot
ICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRoZSBwcmV2
aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZpc2libGVB
cmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewotICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUu
Y2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSB7Ci0g
ICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3Jl
KG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKLSAgICB9Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVy
OjpzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVu
dCogY2xpZW50KQotewotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQgPT0gY2xpZW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcmVwbGljYSA9
IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCi0gICAgICAgIHJlcGxpY2EtPnNl
dFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXll
ciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCi0gICAgICAgIG1hc2st
PnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAg
ICAgIGxheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7Ci0gICAgfQotCi0g
ICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIHJlc291cmNlcyBvbiB0aGUgVUkgcHJvY2VzcyBoZXJl
IGlmIHRoZSByZW1vdGUgY2xpZW50IGhhcyBjaGFuZ2VkIG9yIGlzIHJlbW92ZWQuCi0gICAgaWYg
KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMo
KTsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsK
LSAgICB9Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID0gY2xpZW50OwotICAgIGlmIChj
bGllbnQpCi0gICAgICAgIGNsaWVudC0+YXR0YWNoTGF5ZXIodGhpcyk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QoKQotewotICAgIGlmIChtX21haW5CYWNr
aW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGlsZXNJZk5l
ZWRlZCgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZp
c2libGVSZWN0KCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7Ci0gICAg
bV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7Ci0gICAgbV9s
YXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKLSAgICBtX2xheWVyVHJhbnNm
b3JtLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0u
c2V0U2l6ZShzaXplKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJl
c2VydmVzM0QoKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShj
aGlsZHJlblRyYW5zZm9ybSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zv
cm1zKHBhcmVudCgpID8gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5z
Zm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLQot
ICAgIC8vIFRoZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRpbGVkQmFja2lu
Z1N0b3JlVmlzaWJsZVJlY3QuCi0gICAgYWRqdXN0VmlzaWJsZVJlY3QoKTsKLSAgICBhZGp1c3RD
b250ZW50c1NjYWxlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IGNy
ZWF0ZVdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewotICAg
IHJldHVybiBhZG9wdFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGllbnQpKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6
c2V0R3JhcGhpY3NMYXllckZhY3RvcnkoY3JlYXRlV2ViR3JhcGhpY3NMYXllcik7Ci19Ci0KLWJv
b2wgV2ViR3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3Jt
cygpCi17Ci0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTlkMDY3NTA0MWQwNDYxYzRjNzU1ZDRhNzc1OTIz
ODRhYTE2MTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dl
YkdyYXBoaWNzTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCArMCwwIEBACi0gICAgLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBXZWJHcmFwaGlj
c0xheWVyX2gKLSNkZWZpbmUgV2ViR3JhcGhpY3NMYXllcl9oCi0KLSNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NM
YXllclRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKLSNpbmNsdWRlICJU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVJ
bmZvLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9v
cC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgV2ViR3JhcGhpY3NMYXll
cjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQgewotcHVibGljOgotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCkgPSAwOwotCi0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFn
ZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0
X3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29u
c3QgV2ViTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJl
bihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9IDA7Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShRVCkKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VU
b2tlbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdl
YkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhl
ZExheWVycygpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6Oklu
dFBvaW50JikgPSAwOwotfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXZWJH
cmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIKLSAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVD
bGllbnQgewotcHVibGljOgotICAgIFdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVu
dCopOwotICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsKLQotICAgIC8vIFJlaW1wbGVt
ZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29u
c3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NM
YXllciopOwotICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOwot
ICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwot
ICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOwot
ICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0Qm
KTsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIHNldENoaWxkcmVu
VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sKTsKLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7Ci0gICAgdm9p
ZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9v
bCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKLSAgICB2b2lkIHNldEJhY2tm
YWNlVmlzaWJpbGl0eShib29sKTsKLSAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOwotICAgIHZv
aWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNldENvbnRlbnRz
VG9JbWFnZShJbWFnZSopOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxh
eWVyKik7Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAgIHZvaWQg
c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwotICAgIHZvaWQgc2V0Q29u
dGVudHNTY2FsZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSAgICBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0K
LSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBp
ZCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViS2l0
OjpXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7Ci0gICAgSW1hZ2UqIGlt
YWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotCi0gICAgYm9vbCBmaXhlZFRvVmlld3Bv
cnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQotICAgIHZvaWQgc2V0Rml4
ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7
IH0KLQotICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX21h
c2tUYXJnZXQ7IH0KLSAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhpY3NMYXllciogbGF5ZXIp
IHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KLQotICAgIHN0YXRpYyB2b2lkIGluaXRGYWN0b3J5
KCk7Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCB0
aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNr
aW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+
JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlVXBkYXRl
c0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVD
b250ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNp
YmxlUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVu
dAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdl
YktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQot
ICAgIHZvaWQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OldlYkdyYXBoaWNzTGF5
ZXJDbGllbnQqKTsKLSAgICB2b2lkIHN5bmNDaGlsZHJlbigpOwotICAgIHZvaWQgc3luY0xheWVy
U3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzeW5jRmlsdGVycygp
OwotI2VuZGlmCi0gICAgdm9pZCBzeW5jQ2FudmFzKCk7Ci0gICAgdm9pZCBlbnN1cmVJbWFnZUJh
Y2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgIGJvb2wg
aXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVDb250ZW50
QnVmZmVycygpOwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJ
RCBtX2lkOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIFJlZlB0
cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7Ci0gICAg
RmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBHcmFwaGljc0xheWVyVHJhbnNmb3Jt
IG1fbGF5ZXJUcmFuc2Zvcm07Ci0gICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDE7Ci0gICAgYm9v
bCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0OiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jTGF5
ZXJTdGF0ZTogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOwotICAgIGJvb2wg
bV9zaG91bGRTeW5jRmlsdGVyczogMTsKLSAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsK
LSAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsKLQotICAgIHZvaWQgbm90aWZ5Q2hh
bmdlKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotICAgIHZvaWQgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2
ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLSAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0
b3JlKCk7Ci0gICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci0gICAgdm9pZCBjb21wdXRl
VHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOwotICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycygp
OwotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLSAgICBmbG9hdCBlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCk7Ci0KLSAgICBXZWJLaXQ6OldlYkdyYXBoaWNzTGF5ZXJDbGll
bnQqIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudDsKLSAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdTdG9yZTsKLSAgICBPd25QdHI8V2ViQ29yZTo6VGls
ZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNCYWNraW5nU3RvcmU7Ci0gICAgZmxvYXQgbV9jb250
ZW50c1NjYWxlOwotICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKLX07
Ci0KLVdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7
Ci0KLX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gV2ViR3JhcGhpY3NMYXllcl9ICmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRleCAxMzcy
ZjJhMjk2NDhiM2YxMDEwZWMxMzdiMjQ0OTZhZThmNmQ2MTc2Li45YzJlNzQ0ZjRkZmQzMWIxOTcw
OGQxMmViMTRmMzU5OTc1YTJiYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVSZW5kZXJpbmcoKSB7IH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzRGV2aWNlQWRhcHRlciogZ3Jh
cGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKLSNpZiBV
U0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogI2VuZGlmCiAKQEAgLTEx
NCw3ICsxMTQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7CiAKLSNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTI1
NjAwYjE0NzEyODUxZTkzNDliY2RkNTg1OGI2N2NiZTA2YzFjLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKLQotI2lmIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
OjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Q2xpZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29u
c3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3JlKQotICAgICwgbV9jb29y
ZGluYXRlKHRpbGVDb29yZGluYXRlKQotICAgICwgbV9yZWN0KHRpbGVkQmFja2luZ1N0b3JlLT50
aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQotICAgICwgbV9JRCgwKQotICAg
ICwgbV9kaXJ0eVJlY3QobV9yZWN0KQotewotfQotCi1UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGU6On5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKQotewotICAgIGlmIChtX0lEKQotICAg
ICAgICBtX2NsaWVudC0+cmVtb3ZlVGlsZShtX0lEKTsKLX0KLQotYm9vbCBUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGU6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJldHVybiAhbV9kaXJ0eVJl
Y3QuaXNFbXB0eSgpOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aW52
YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgSW50UmVjdCB0aWxlRGly
dHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKLSAgICBpZiAodGlsZURp
cnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlydHlSZWN0LnVu
aXRlKHRpbGVEaXJ0eVJlY3QpOwotfQotCi1WZWN0b3I8SW50UmVjdD4gVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKLXsKLSAgICBpZiAoIWlzRGlydHkoKSkK
LSAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwotCi0gICAgU3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbzsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRl
eHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGlydHlSZWN0LnNpemUoKSwgdXBk
YXRlSW5mby5zdXJmYWNlSGFuZGxlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOwotICAgIGlm
ICghZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci0g
ICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0LngoKSwgLW1fZGlydHlS
ZWN0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUobV90aWxlZEJh
Y2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50
c1NjYWxlKCkpKTsKLSAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNr
aW5nU3RvcmVQYWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIG1fdGlsZWRCYWNraW5nU3RvcmUt
Pm1hcFRvQ29udGVudHMobV9kaXJ0eVJlY3QpKTsKLQotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVj
dCA9IG1fZGlydHlSZWN0OwotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3Qu
eCgpLCAtbV9yZWN0LnkoKSk7Ci0gICAgdXBkYXRlSW5mby5zY2FsZUZhY3RvciA9IG1fdGlsZWRC
YWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKTsKLSAgICBncmFwaGljc0NvbnRleHQucmVsZWFz
ZSgpOwotCi0gICAgc3RhdGljIGludCBpZCA9IDA7Ci0gICAgaWYgKCFtX0lEKSB7Ci0gICAgICAg
IG1fSUQgPSArK2lkOwotICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJ
bmZvLCBtX3JlY3QpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZSht
X0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOwotCi0gICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7
Ci0gICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKLXsKLSAgICAvLyBIYW5kbGVk
IGJ5IHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQuCi19Ci0KLWJvb2wgVGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlOjppc1JlYWR5VG9QYWludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhbV9J
RDsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnJlc2l6
ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0
LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1fZGlydHlSZWN0ID0gbV9yZWN0OwotfQotCi1U
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGVCYWNrZW5kKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50KQot
ICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6
VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxl
OjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLXsKLSAgICByZXR1cm4gVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxl
Q29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2Vu
ZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWUxMWU5YmI3N2FkMTQ0NDc5YTRh
YTJhYjgyZjRjOGFhOTIwOWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZV9o
Ci0jZGVmaW5lIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZV9oCi0KLSNpZiBVU0UoVElMRURf
QkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKLSNpbmNsdWRl
ICJUaWxlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJD
b3JlL0ludFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW1hZ2VCdWZmZXI7
Ci1jbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudDsKLWNsYXNzIFN1cmZhY2VVcGRh
dGVJbmZvOwotCi1jbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUgOiBwdWJsaWMgV2Vi
Q29yZTo6VGlsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZT4gY3JlYXRl
KFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50LCBXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IENvb3JkaW5hdGUmIHRpbGVD
b29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVU
aWxlKGNsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKSk7IH0KLSAgICB+
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKCk7Ci0KLSAgICBib29sIGlzRGlydHkoKSBjb25z
dDsKLSAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIFZl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiB1cGRhdGVCYWNrQnVmZmVyKCk7Ci0gICAgdm9pZCBzd2Fw
QmFja0J1ZmZlclRvRnJvbnQoKTsKLSAgICBib29sIGlzUmVhZHlUb1BhaW50KCkgY29uc3Q7Ci0g
ICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7Ci0KLSAgICBjb25zdCBDb29yZGluYXRlJiBjb29yZGluYXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb29yZGluYXRlOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIHZvaWQgcmVzaXplKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmKTsKLQotcHJpdmF0ZToKLSAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUo
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiwgV2ViQ29yZTo6VGlsZWRCYWNraW5n
U3RvcmUqLCBjb25zdCBDb29yZGluYXRlJik7Ci0KLSAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGVDbGllbnQqIG1fY2xpZW50OwotICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiBt
X3RpbGVkQmFja2luZ1N0b3JlOwotICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOwotICAgIFdl
YkNvcmU6OkludFJlY3QgbV9yZWN0OwotCi0gICAgaW50IG1fSUQ7Ci0gICAgV2ViQ29yZTo6SW50
UmVjdCBtX2RpcnR5UmVjdDsKLQotICAgIE93blB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9s
b2NhbEJ1ZmZlcjsKLX07Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xp
ZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
VGlsZShpbnQgdGlsZUlEKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsKLX07
Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQgOiBwdWJsaWMgV2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+IGNyZWF0ZShUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRQdHIobmV3
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQoY2xpZW50KSk7IH0KLSAgICBQYXNz
UmVmUHRyPFdlYkNvcmU6OlRpbGU+IGNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmUqLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJik7Ci0gICAgdm9pZCBwYWludENo
ZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOwotCi1wcml2YXRlOgotICAgIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJh
Y2tlbmQoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Kik7Ci0gICAgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQotI2VuZGlm
IC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXggMGFjZDM0ODZjMjkwMTQyMDdl
N2U0YmI4ZDhiMGEwZmU2OGQ5ZDMyNi4uNTg4NjlmMzk5NzY4MDMwMDFiMDNhZWE5MDVhMTFkNjgy
MWIzZGI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Vw
ZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBk
YXRlQXRsYXMuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVXBkYXRlQXRsYXMuaCIKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5kZXggNzQ3NjBhNWI0OWQ0NThmYTE4ODVjM2Y2MGI4N2U3
ZjIzMDU3MzMyOS4uN2QyMjIzNzY5YjEyYjNmMGQ3ZDI5NGJjMjZmNzU4ZGIzOWNhYzA0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKQEAg
LTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2UuaCIKIAotI2lmIFVT
RShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEludFJlY3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWlu
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNw
cAppbmRleCBjYjcyY2I5YmU2ZTkyZTJiM2VmOGEzNzE3NmNjZGU4ZGJlMWU2MWZmLi4yOGIyMDBk
MTNmMjIxMWNmZmVkZjUzNDM5YWMwYTVkYTcwZDAwZDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAgLTM4LDcgKzM4LDcgQEAK
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaCIKICNlbmRpZgogI2lmIFVTRShRVEtJVCkKICNpbmNsdWRlICJX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTE4MSw3ICsxODEsNyBAQCBRX0RFQ0xfRVhQT1JUIGlu
dCBXZWJQcm9jZXNzTWFpblF0KFFHdWlBcHBsaWNhdGlvbiogYXBwKQogICAgIH0KICNlbmRpZgog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJHcmFwaGljc0xheWVyOjpp
bml0RmFjdG9yeSgpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW5pdEZhY3Rvcnko
KTsKICNlbmRpZgogCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXpl
KGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156484</attachid>
            <date>2012-08-03 17:06:41 -0700</date>
            <delta_ts>2012-08-03 17:40:54 -0700</delta_ts>
            <desc>Removed unnecessary files from GTK build</desc>
            <filename>bug-93164-20120803170519.patch</filename>
            <type>text/plain</type>
            <size>269941</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAxMTNlYjFjNjQ2MTYwNjdmZDAwZjhj
NTQ2MGVlNTlmMjY4Y2E3M2IuLjg0ZWJhYjM5M2MwMTY5MGEyMzA1YjRlZmU3YzJmNDEyNTM3Yzlm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDgtMDMgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFVJX1NJREVfQ09NUE9TSVRJ
TkcgY29kZSBoYXMgY29uZnVzaW5nIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgVUlfU0lERV9DT01QT1NJVElORyB0byBDT09SRElO
QVRFRF9HUkFQSElDUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEyLTA4LTAz
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTdHJp
bmdJbXBsIGNyZWF0ZWQgZnJvbSBsaXRlcmFsIHNob3VsZCBiZSBCdWZmZXJJbnRlcm5hbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDkzMWU2OWIwOWE4ZWM1ZjFjNzM5OGY2MmFjNTZkMDdlYjhjOWU4ODkuLjgzN2Ez
NmNiNTNiZTk3ZjgxNDA5OWY2MGQ1ZTIxYjMzYjQ2NzExZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NSBAQAorMjAxMi0wOC0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFtRdF0gVUlfU0lERV9DT01QT1NJVElORyBjb2RlIGhhcyBjb25m
dXNpbmcgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzMTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lZCBhbmQgY29uc29saWRhdGVkIGNvZGUgZ3VhcmRlZCB1bmRlciBVSV9TSURFX0NP
TVBPU0lUSU5HLCBub3cgdW5kZXIKKyAgICAgICAgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSBn
dWFyZCBhbmQgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xkZXJzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAo
UVJhd1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAg
IChEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDb250ZW50c1NHTm9kZTo6Q29udGVudHNTR05vZGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZW50c1NHTm9kZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoQ29udGVudHNT
R05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoUXRXZWJQYWdlU0dOb2RlKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVBbmltYXRpb24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGls
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2luZ0FyZWFJbXBs
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAg
ICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMi0wOC0wMyAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGhpbmcgaGFwcGVucyB3aGVuIGNsaWNr
aW5nIG9uIHRoZSB1bmF2YWlsYWJsZSBwbHVnLWluIGJ1dHRvbiBmb3IgYSBibG9ja2VkIHBsdWct
aW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IDUwNzEwYjEzODMwODgxM2YyNDI4MzliYWFhYzU0MzY4YzAzNjdi
MDkuLmI3MzgzYjIyZWIzZjc5ZTllNGMzMjg4YmRiZGZhNTMxYWQ0YzM4MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAogLyogQ29tcG9zaXRpbmcgb24gdGhlIFVJLXByb2Nl
c3MgaW4gV2ViS2l0MiAqLwogI2lmIFBMQVRGT1JNKFFUKQotI2RlZmluZSBXVEZfVVNFX1VJX1NJ
REVfQ09NUE9TSVRJTkcgMQorI2RlZmluZSBXVEZfVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIDEK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IGE5NWViYTExOWRkMzQ1MGUwNDExYjgzNGUzZDljZmNjYjk4MTY4MjguLmUy
YmQyMTgxMTNhNzkzZGQzOTFlM2I3ZGU0MTE2ZTZiZTJhMzI3NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjEsNyArMjIxLDcgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vz
cy9GaW5kSW5kaWNhdG9yLmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCisKICAgICBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAKICAgICBVSVBy
b2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBTRVQoV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKICAgICBVSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3Rv
cmFnZU1hbmFnZXJQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCisKICAgICBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9u
RGF0YS5jcHAKQEAgLTMyMyw2ICszMjMsOSBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwCiAgICAgVUlQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisgICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisgICAgCiAgICAg
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAogCiAgICAgVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC00NTQsMTEgKzQ1NywxMCBA
QCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFw
dGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAorCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250
cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC00NjcsNiArNDY5LDkgQEAgU0VUKFdlYktp
dDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVW5kb1N0ZXAuY3BwCisKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKICkKIAogU0VUKFdlYktpdDJfTUVTU0FH
RVNfSU5fRklMRVMKQEAgLTQ3Nyw3ICs0ODIsNiBAQCBTRVQoV2ViS2l0Ml9NRVNTQUdFU19JTl9G
SUxFUwogICAgIFNoYXJlZC9QbHVnaW5zL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyLm1lc3NhZ2Vz
LmluCiAKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5tZXNzYWdlcy5pbgotICAgIFVJ
UHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9j
ZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICAgICBVSVBy
b2Nlc3MvV2ViQmF0dGVyeU1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9X
ZWJDb250ZXh0Lm1lc3NhZ2VzLmluCkBAIC00OTUsNiArNDk5LDkgQEAgU0VUKFdlYktpdDJfTUVT
U0FHRVNfSU5fRklMRVMKICAgICBVSVByb2Nlc3MvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbgogICAgIFVJUHJvY2Vzcy9XZWJWaWJyYXRpb25Qcm94eS5tZXNzYWdlcy5p
bgogCisKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvclByb3h5Lm1lc3NhZ2VzLmluCisgICAgCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3du
bG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KQEAgLTUzNCw5ICs1NDEsMTAgQEAg
U0VUKFdlYktpdDJfTUVTU0FHRVNfSU5fRklMRVMKIAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3Bh
dGNoZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKworICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCiApCiAKIFNFVChXZWJQcm9j
ZXNzX0VYRUNVVEFCTEVfTkFNRSBXZWJQcm9jZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJp
CmluZGV4IDQyZmE2NjU3YTJjYTc4MjEzMzU0NzU3ZjljZmQ4OGMxNDhhMTA4ZDQuLjI2Y2JiMmI4
NTZlZTk1MWRhYjJhNzljNTMwYzk1YWU3NjkxMDA5OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNl
cy5wcmkKQEAgLTUxLDggKzUxLDEwIEBAIFZQQVRIID0gXAogICAgIFdlYlByb2Nlc3MvUmVzb3Vy
Y2VDYWNoZSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcyBc
CiAgICAgV2ViUHJvY2VzcyBcCiAgICAgVUlQcm9jZXNzIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcyBcCiAgICAgVUlQcm9jZXNzL0Rvd25sb2FkcyBcCiAgICAgVUlQcm9jZXNz
L05vdGlmaWNhdGlvbnMgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zIFwKQEAgLTkzLDEwICs5NSwx
MCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBXZWJOb3RpZmljYXRpb25NYW5hZ2VyLm1l
c3NhZ2VzLmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiBcCiAgICAg
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9M
YXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9XZWJJbnNwZWN0
b3IubWVzc2FnZXMuaW4gXAotICAgIFdlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBcCisgICAg
RHJhd2luZ0FyZWEubWVzc2FnZXMuaW4gXAorICAgIExheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3Nh
Z2VzLmluIFwKKyAgICBXZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gXAorICAgIFdlYlBhZ2UubWVz
c2FnZXMuaW4gXAogICAgIFdlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZTdhNjRmMDMzYmE2ZmUzZWMwYmJkN2M5
MGM4NjBiZjcwODMzNTUxMi4uODM2NmZjY2M3YjE3MThlNjA4ZGNkY2Y1YjQ2ZDdjOWI1OTFkODFk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xNDAsOCArMTQwLDYgQEAgd2Vi
a2l0Ml9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL0RyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL0V2ZW50RGlzcGF0
Y2hlck1lc3NhZ2VSZWNlaXZlci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvRXZlbnRE
aXNwYXRjaGVyTWVzc2FnZXMuaCBcCi0JRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9MYXllclRyZWVD
b29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9MYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZlck1lc3NhZ2VSZWNlaXZlci5jcHAgXAog
CURlcml2ZWRTb3VyY2VzL1dlYktpdDIvTlBPYmplY3RNZXNzYWdlUmVjZWl2ZXJNZXNzYWdlcy5o
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAppbmRleCA5YjA0NDhhZThhNzZlZGEzZjlmZWZlZmEzZGVjYTI1N2M4NzE0ZTNm
Li45OTU2M2Y0ZTdlZTBkMzQ2ZTBhMDMzYjgzZDUzNmNiNjNhYmZjZmUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtNDYsNyArNDYs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93RmVhdHVyZXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSA8V2ViQ29yZS9BbmltYXRpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQzRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVHJh
bnNmb3JtYXRpb25NYXRyaXguaD4KQEAgLTY1Miw3ICs2NTIsNyBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8S1VSTD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEtVUkwmIHJlc3VsdCkK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIHZvaWQgQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50
M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBGbG9hdFBvaW50M0Qm
IGZsb2F0UG9pbnQzRCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46
OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IGRiMmI4Zjc0MWVjMmEzMWFjYmRjMTI3YzQx
NzFmOWNiMzdkNDU5YWMuLmI3Njc4YzUyNTQ5Y2MyNWRjOWEzMGM3MGU4ODBhODE4OWViYTMyYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAg
LTg2LDcgKzg2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogfQogI2VuZGlmCiAKLSNpZiBVU0Uo
VUlfU0lERV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykgJiYgRU5BQkxFKENTU19GSUxURVJTKQogbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIEZpbHRlck9wZXJhdGlvbnM7CiB9CkBAIC0yNDAsNyArMjQwLDcgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpLVVJMPiB7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OktVUkwmKTsKIH07CiAK
LSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQz
RD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50M0QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2ludDNEJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
TGF5ZXJUcmVlSW5mby5jcHAKaW5kZXggZmZkZWE1MjJiMzlkMjZjNGY3YTUxMTg5MWU1ZGVjYjg3
MDhkNDRjZC4uZTA4MzY0MDA2OTg1ZDBiZGE1ZDFhNjFlNDM5YmQ4OTE4MTgxODRmYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcApAQCAtMTksNyArMTksNyBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5m
by5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViTGF5ZXJUcmVlSW5mby5oCmluZGV4IGQ1ZDcyMzM5MTFlMGQyZGNiMmRkZTYxMzNiZjUzNmQ0
NThhOTJmNjQuLmRmNDQ3NzhhOGQ2YmJhZGI4MDgwMGUwOWRjNTEzY2VhMzEyYjE0Y2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaApAQCAtMjAsNyArMjAsNyBAQAog
I2lmbmRlZiBXZWJMYXllclRyZWVJbmZvX2gKICNkZWZpbmUgV2ViTGF5ZXJUcmVlSW5mb19oCiAK
LSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVu
Y29kZXIuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGVkZWE5YzU5MTE2MTU3ZTk4YThkMjdkNjU5MDM5MmQz
YThlODdjNjguLmIxNGFkZDc0NzBlNzQ3YTQ4Yzg2YmFmY2ZlM2ZkYTFhYWY0NDQ3MjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFy
Z2V0LnByaQpAQCAtMjE1LDYgKzIxNSw5IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9B
dXRoZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgVUlQcm9jZXNzL0JhY2tp
bmdTdG9yZS5oIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCisg
ICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUu
aCBcCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5oIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaCBcCiAgICAgVUlQcm9jZXNzL0ZpbmRJbmRpY2F0
b3IuaCBcCkBAIC0yMjMsNyArMjI2LDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTGF1bmNo
ZXIvUHJvY2Vzc0xhdW5jaGVyLmggXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVu
Y2hlci5oIFwKLSAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKICAg
ICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5o
IFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXJQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb24uaCBcCkBAIC0yNjgsNyArMjcwLDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9j
ZXNzL1dlYkljb25EYXRhYmFzZUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViSW5zcGVjdG9y
UHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQcm94eS5o
IFwKLSAgICBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCBcCiAgICAgVUlQcm9jZXNz
L1dlYkxvYWRlckNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQ
cm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViTmF2aWdhdGlvbkRhdGEuaCBcCkBAIC0zMDQsNyAr
MzA1LDYgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJv
eHlRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViR2VvbG9jYXRpb25Qcm92aWRlclF0LmggXAog
ICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0LmggXAotICAgIFVJUHJvY2Vzcy90
ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgV2ViUHJvY2Vzcy9BcHBsaWNhdGlvbkNh
Y2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmggXAogICAgIFdlYlByb2Nlc3MvQXV0aGVu
dGljYXRpb24vQXV0aGVudGljYXRpb25NYW5hZ2VyLmggXAogICAgIFdlYlByb2Nlc3MvQmF0dGVy
eS9XZWJCYXR0ZXJ5TWFuYWdlci5oIFwKQEAgLTM4NSw4ICszODUsOSBAQCBIRUFERVJTICs9IFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGlu
YXRvci9MYXllclRyZWVDb29yZGluYXRvci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oIFwKKyAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxl
LmggXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250
cm9sbGVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaCBcCkBAIC01ODUsNiArNTg2LDkgQEAgU09V
UkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFj
ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvQmFja2luZ1N0b3JlUXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIFwKKyAgICBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBcCkBA
IC01OTYsNyArNjAwLDYgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Ro
cmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQu
Y3BwIFwKLSAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNw
cCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJO
b3RpZmljYXRpb24uY3BwIFwKQEAgLTYzOSw3ICs2NDIsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBV
SVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYklu
c3BlY3RvclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFn
ZXJQcm94eS5jcHAgXAotICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0
YS5jcHAgXApAQCAtNjgyLDcgKzY4NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9x
dC9XZWJQb3B1cE1lbnVQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlByZWZlcmVu
Y2VzUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuY3Bw
IFwKLSAgICBVSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgV2Vi
UHJvY2Vzcy9BcHBsaWNhdGlvbkNhY2hlL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL0JhdHRlcnkvV2ViQmF0dGVyeU1hbmFnZXIuY3BwIFwKQEAgLTc4
MSwxMiArNzgyLDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNv
ZGVyQWRhcHRlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIFwKLSAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2Vi
R3JhcGhpY3NMYXllci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBk
YXRlQXRsYXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0
UHJveHkuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3Bw
CmluZGV4IDk5YzVmZmI0MDUyNTg1ZjU4MzU4ZWRlZjA5OWJkN2RiODgwNjQyYjMuLjc5MTFmMTY3
Yzk3NmZhYThiYzU0YWI3NDNmYjEwMjU1OTE3M2ExOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtMjIsMTAgKzIyLDEwIEBA
CiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKICNpbmNsdWRlICJMYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRl
ICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJl
ZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXF1aWNr
d2VicGFnZV9wX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKQEAgLTgyLDcgKzgy
LDcgQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9s
ZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQogICAgICAgICByZXR1cm4gb2xkTm9kZTsKIAog
ICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkg
PSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkoKTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVDb29y
ZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIExheWVyVHJlZVJlbmRlcmVy
KiByZW5kZXJlciA9IGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVy
KCk7CiAKICAgICBRdFdlYlBhZ2VTR05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxRdFdlYlBhZ2VT
R05vZGUqPihvbGROb2RlKTsKICAgICBpZiAoIW5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKaW5kZXggMTIxZjkwZDg4OWYz
ZDJmMjg2YWYwOGEwYjkwZjFiZDRmYmZlYWE1Ny4uMGFlZDVkOTQ4NjgzMDBmYWFhNGY1MzdlMjkx
NGUyZGUzMjUyODkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9yYXcvcXJhd3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcApAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgIkN1cnNv
ci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oIgorI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1v
dXNlRXZlbnQuaCIKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzEsNyArMzIsNiBAQAog
I2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5k
ZXJlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAicXJhd3dlYnZpZXdfcF9wLmgiCkBAIC0zNTMsNyArMzUzLDcgQEAg
dm9pZCBRUmF3V2ViVmlldzo6cGFpbnQoY29uc3QgUU1hdHJpeDR4NCYgdHJhbnNmb3JtLCBmbG9h
dCBvcGFjaXR5LCB1bnNpZ25lZCBwYWkKICAgICBpZiAoIWNvb3JkaW5hdG9yUHJveHkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVy
ID0gY29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBXZWJLaXQ6Okxh
eWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODRmNmVi
ZDJmMTY1OGU2OTk2NWU0NzFiYTM2MjVhOTIyODlmYWE3MgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1
cm47CisKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChtX3RhcmdldFJlY3QpOworICAgIHRhcmdl
dFJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsKKyAgICBib29sIHNob3VsZFJlc2V0ID0gZmFsc2U7
CisgICAgaWYgKHRhcmdldFJlY3QgIT0gcmVjdCgpKSB7CisgICAgICAgIHNldFJlY3QodGFyZ2V0
UmVjdCk7CisgICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKKyAgICB9CisgICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlzLT50ZXh0dXJlKCk7CisgICAgaWYgKCF0ZXh0dXJl
KSB7CisgICAgICAgIHRleHR1cmUgPSB0ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5nZXQoKSk7CisgICAgICAgIHNob3VsZFJlc2V0ID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRleHR1cmUtPnJl
c2V0KG1fdGFyZ2V0UmVjdC5zaXplKCksIG1fc3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsK
KworICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1f
c3VyZmFjZU9mZnNldCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc291cmNlUmVj
dCA9IHNvdXJjZVJlY3Q7CisgICAgbV90YXJnZXRSZWN0ID0gdGFyZ2V0UmVjdDsKKyAgICBtX3N1
cmZhY2VPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKGludCBpZCwgZmxvYXQgc2NhbGUp
Cit7CisgICAgbV90aWxlcy5hZGQoaWQsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShzY2Fs
ZSkpOworICAgIG1fc2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6cmVtb3ZlVGlsZShpbnQgaWQpCit7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFwcGVuZChp
ZCk7Cit9CisKKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKK3sKKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
Pjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX3Rp
bGVzLmVuZCgpKTsKKyAgICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOworICAg
IGl0LT5zZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVm
ZmVyLCBvZmZzZXQpOworfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPGludCwgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQo
KTsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJl
KCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7Cisg
ICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30KKworc3Rh
dGljIGJvb2wgc2hvdWxkU2hvd1RpbGVEZWJ1Z1Zpc3VhbHMoKQoreworI2lmIFBMQVRGT1JNKFFU
KQorICAgIHJldHVybiAocWdldGVudigiUVRfV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdf
VklTVUFMUyIpID09ICIxIik7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVy
ZSogbWFzaykKK3sKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7
CisKKyAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2Fz
ZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBGbG9h
dFJlY3QgY292ZXJlZFJlY3Q7CisgICAgZm9yIChIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7CisgICAgICAgICAg
ICB0aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKKyAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVu
aXRlKHRpbGUucmVjdCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhp
Z2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KKyAgICAgICAgLy8gV2Ugc2hv
dyB0aGUgcHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qg
d2l0aCBhbnkgY3VycmVudC1zY2FsZSB0aWxlLgorICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUg
JiYgY292ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICB0aWxlc1RvUGFpbnQucHJlcGVuZCgmdGlsZSk7CisgICAgfQorCisg
ICAgLy8gVE9ETzogV2hlbiB0aGUgVGV4dHVyZU1hcHBlciBtYWtlcyBhIGRpc3RpbmN0aW9uIGJl
dHdlZW4gc29tZSBlZGdlcyBleHBvc2VkIGFuZCBubyBlZGdlcworICAgIC8vIGV4cG9zZWQsIHRo
ZSB2YWx1ZSBwYXNzZWQgc2hvdWxkIGJlIGFuIGFjY3VyYXRlIHJlZmxlY3Rpb24gb2YgdGhlIHRp
bGUgc3Vic2V0IHRoYXQgd2UgYXJlCisgICAgLy8gcGFzc2luZy4gRm9yIG5vdyB3ZSBqdXN0ICJl
c3RpbWF0ZSIgc2luY2UgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgZG9lc24ndCBrZWVwIGluZm9y
bWF0aW9uIGFib3V0CisgICAgLy8gdGhlIHRvdGFsIHRpbGVkIHN1cmZhY2UgcmVjdCBhdCB0aGUg
bW9tZW50LgorICAgIHVuc2lnbmVkIGVkZ2VzRXhwb3NlZCA9IG1fdGlsZXMuc2l6ZSgpID4gMSA/
IFRleHR1cmVNYXBwZXI6Ok5vRWRnZXMgOiBUZXh0dXJlTWFwcGVyOjpBbGxFZGdlczsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9QYWludC5zaXplKCk7ICsraSkgeworICAgICAg
ICBUZXh0dXJlTWFwcGVyVGlsZSogdGlsZSA9IHRpbGVzVG9QYWludFtpXTsKKyAgICAgICAgdGls
ZS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCBlZGdlc0V4
cG9zZWQpOworICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGREZWJ1ZyA9IHNob3VsZFNob3dUaWxl
RGVidWdWaXN1YWxzKCk7CisgICAgICAgIGlmICghc2hvdWxkRGVidWcpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3Qm9yZGVyKENvbG9yKDB4RkYs
IDAsIDApLCAyLCB0aWxlLT5yZWN0KCksIHRyYW5zZm9ybSk7CisgICAgICAgIHRleHR1cmVNYXBw
ZXItPmRyYXdSZXBhaW50Q291bnRlcihzdGF0aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGUqPih0aWxlKS0+cmVwYWludENvdW50KCksIDgsIHRpbGVzVG9QYWludFtpXS0+cmVjdCgp
LmxvY2F0aW9uKCksIHRyYW5zZm9ybSk7CisgICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQoreworICAgIFZlY3RvcjxpbnQ+OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5kID0gbV90
aWxlc1RvUmVtb3ZlLmVuZCgpOworICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0g
bV90aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1vdmVFbmQ7ICsraXQpCisg
ICAgICAgIG1fdGlsZXMucmVtb3ZlKCppdCk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7
CisKKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0
b3IgdGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBp
dCAhPSB0aWxlc0VuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0
dXJlTWFwcGVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzN2ZlYmE3MGFj
OGJlZWNiMmQwMzY0OTVmYmRmYzRmMzRmZmI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdT
dG9yZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKKyNkZWZpbmUgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgU2hhcmVhYmxlU3VyZmFjZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAg
ICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQorICAgICAgICA6
IFRleHR1cmVNYXBwZXJUaWxlKFdlYkNvcmU6OkZsb2F0UmVjdCgpKQorICAgICAgICAsIG1fc2Nh
bGUoc2NhbGUpCisgICAgICAgICwgbV9yZXBhaW50Q291bnQoMCkKKyAgICB7CisgICAgfQorCisg
ICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAgIGlu
bGluZSB2b2lkIGluY3JlbWVudFJlcGFpbnRDb3VudCgpIHsgKyttX3JlcGFpbnRDb3VudDsgfQor
ICAgIGlubGluZSBpbnQgcmVwYWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Q291
bnQ7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAg
ICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IGJ1ZmZlciwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8U2hhcmVhYmxlU3Vy
ZmFjZT4gbV9zdXJmYWNlOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OworICAg
IFdlYkNvcmU6OkludFJlY3QgbV90YXJnZXRSZWN0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1f
c3VyZmFjZU9mZnNldDsKKyAgICBmbG9hdCBtX3NjYWxlOworICAgIGludCBtX3JlcGFpbnRDb3Vu
dDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIDogcHVibGljIFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHZvaWQgY3JlYXRlVGls
ZShpbnQsIGZsb2F0KTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoaW50KTsKKyAgICB2b2lkIHVwZGF0
ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSk7IH0KKyAg
ICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKKyAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBl
ciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQsIFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsKKworcHJpdmF0ZToK
KyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSgpCisgICAgICAgIDogbV9zY2FsZSgxLikKKyAg
ICB7IH0KKyAgICBIYXNoTWFwPGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBtX3Rp
bGVzOworICAgIFZlY3RvcjxpbnQ+IG1fdGlsZXNUb1JlbW92ZTsKKyAgICBmbG9hdCBtX3NjYWxl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYKKworI2VuZGlmIC8vIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWIwYTVhMzk1NWViMTVmYmVkNjBkMzlmNjc5OTRm
OWNjMDRmMmY4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCkBAIC0wLDAg
KzEsMTc4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgor
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJl
ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2RyYXdpbmdBcmVh
UHJveHkoZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKKyAgICAsIG1fbGFzdFNlbnRTY2FsZSgwKQoreworfQor
CitMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojp+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgp
Cit7CisgICAgbV9yZW5kZXJlci0+ZGV0YWNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpk
aXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBt
X3JlbmRlcmVyLT5hcHBlbmRVcGRhdGUoZnVuY3Rpb24pOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1
cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQs
IHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQoreworICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNl
OworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGludCB0b2tlbiA9IHVwZGF0ZUluZm8u
c3VyZmFjZUhhbmRsZS5ncmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIGlmICh0b2tlbikgewor
ICAgICAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPjo6aXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodG9rZW4pOworICAgICAgICBpZiAoaXQgPT0gbV9z
dXJmYWNlcy5lbmQoKSkgeworICAgICAgICAgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6
OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUpOworICAgICAgICAgICAgbV9zdXJmYWNl
cy5hZGQodG9rZW4sIHN1cmZhY2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHN1cmZh
Y2UgPSBpdC0+c2Vjb25kOworICAgIH0gZWxzZQorICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxl
U3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CisjZWxzZQorICAgIHN1
cmZhY2UgPSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxl
KTsKKyNlbmRpZgorICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1
cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJl
bmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGFyZ2V0UmVjdCwgc3Vy
ZmFjZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3Zl
VGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklE
IGlkKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxl
dGVMYXllciwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOwor
fQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldFJvb3RMYXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAgIHVw
ZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYg
aW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0
TGF5ZXJTdGF0ZSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGluZm8pKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5
ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZHJlbikKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJG
aWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmls
dGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZFJlbmRlckZyYW1lKCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMsIG1f
cmVuZGVyZXIuZ2V0KCkpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0
X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCit7
CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFwKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZElt
YWdlKGludDY0X3Qga2V5KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fcmVuZGVyZXIuZ2V0KCksIGtleSkpOworfQorCit2b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNp
emUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6c2V0Q29udGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUp
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBh
ZGp1c3Qgdmlld3BvcnQtZml4ZWQgbGF5ZXJzLgorICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgp
LCByZWN0KSk7CisKKyAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBp
dCB0byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5n
LiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgIEludFJlY3Qgcm91
bmRlZFJlY3QgPSByb3VuZGVkSW50UmVjdChyZWN0KTsKKyAgICBpZiAocm91bmRlZFJlY3QgPT0g
bV9sYXN0U2VudFZpc2libGVSZWN0ICYmIHNjYWxlID09IG1fbGFzdFNlbnRTY2FsZSAmJiB0cmFq
ZWN0b3J5VmVjdG9yID09IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6U2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyb3Vu
ZGVkUmVjdCwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cGFnZUlEKCkpOworICAgIG1fbGFzdFNlbnRWaXNpYmxlUmVjdCA9IHJvdW5kZWRSZWN0
OworICAgIG1fbGFzdFNlbnRTY2FsZSA9IHNjYWxlOworICAgIG1fbGFzdFNlbnRUcmFqZWN0b3J5
VmVjdG9yID0gdHJhamVjdG9yeVZlY3RvcjsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpSZW5k
ZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdl
dCgpLCBwb3NpdGlvbikpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnN5
bmNDYW52YXModWludDMyX3QgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90
IGdyYXBoaWNzU3VyZmFjZVRva2VuKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2FudmFzU2l6
ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+
cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpQ
dXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgp
KTsKK30KKworfQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNmYxNWQx
ZDMxMGVkMzY0OWZhNzg5MGE2ZTFlOGUzNWUzMmEzMzIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5k
ZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCisjZGVmaW5lIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHlfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAi
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgorI2luY2x1ZGUg
IlJlZ2lvbi5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2Vi
TGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworUVRfQkVHSU5fTkFNRVNQQUNF
CitjbGFzcyBRU0dOb2RlOworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBX
ZWJMYXllclVwZGF0ZUluZm87CisKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgewor
cHVibGljOgorICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OworICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKKyAgICB2b2lkIHNl
dENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsK
KyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBW
ZWN0b3I8V2ViTGF5ZXJJRD4mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBz
ZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIo
V2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklE
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3Jl
SVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQgcHVy
Z2VHTFJlc291cmNlcygpOworICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
dHJhamVjdG9yeVZlY3Rvcik7CisgICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOworICAgIHZvaWQg
Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRlRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZSYpOworICAgIHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3QpOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOworICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uKTsKKyAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIExheWVyVHJlZVJl
bmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0
KCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYpOworCisgICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5
OworICAgIFJlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsKKyAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKKyAgICBmbG9hdCBtX2xhc3RTZW50U2Nh
bGU7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBIYXNoTWFwPHVpbnQzMl90LCBSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOworI2VuZGlmCit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZWNhMDMyZmY0MTYxZTExZDAyOWU1ODQ4YTIzODdiMzc5NjhmYTEzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDM4IEBACisj
CisjICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSB7CisgICAgU2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXll
ckluZm8pCisgICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0
b3I8dWludDMyX3Q+IGNoaWxkcmVuKQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRD
b21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzKQorI2VuZGlmCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMy
X3QgaWQpCisgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50
UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisg
ICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNv
cmU6OkludFJlY3QgdGFyZ2V0UmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJ
bmZvKQorICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlE
KQorICAgIENyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZSkKKyAgICBEZXN0cm95RGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCisgICAgRGlkUmVuZGVyRnJhbWUoKQorICAgIERpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50IHBvc2l0aW9uKQorICAgIFN5bmND
YW52YXModWludDMyX3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3Qg
Z3JhcGhpY3NTdXJmYWNlVG9rZW4pCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzA0ZTVlMzFkOTRjZDU5NTIyMTUzMDVjNmEzMWMzM2Jm
YjBlNjVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNDk5IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIK
KyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlIDxPcGVuR0xT
aGltcy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
Cit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyB2b2lkIGNhbGwoUGFzc1JlZlB0cjxUPiBvYmplY3RUb0d1YXJkLCBj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIE1haW5UaHJl
YWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFkR3VhcmRlZEludm9r
ZXI8VD4ob2JqZWN0VG9HdWFyZCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT25NYWluVGhyZWFk
KGludm9rZSwgaW52b2tlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRHdWFy
ZGVkSW52b2tlcihQYXNzUmVmUHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
bmV3RnVuY3Rpb24pCisgICAgICAgIDogb2JqZWN0VG9HdWFyZChvYmplY3QpCisgICAgICAgICwg
ZnVuY3Rpb24obmV3RnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxUPiBvYmpl
Y3RUb0d1YXJkOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgc3RhdGljIHZv
aWQgaW52b2tlKHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBNYWluVGhyZWFkR3VhcmRlZElu
dm9rZXI8VD4qIGludm9rZXIgPSBzdGF0aWNfY2FzdDxNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8
VD4qPihkYXRhKTsKKyAgICAgICAgaW52b2tlci0+ZnVuY3Rpb24oKTsKKyAgICAgICAgZGVsZXRl
IGludm9rZXI7CisgICAgfQorfTsKKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFp
blRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGlmIChpc01h
aW5UaHJlYWQoKSkKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNlCisgICAgICAgIE1haW5U
aHJlYWRHdWFyZGVkSW52b2tlcjxMYXllclRyZWVSZW5kZXJlcj46OmNhbGwodGhpcywgZnVuY3Rp
b24pOworfQorCitzdGF0aWMgRmxvYXRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRl
bnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplKQoreworICAgIGZsb2F0IHNjcm9s
bFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMC4wZik7CisgICAgc2Ny
b2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBjb250ZW50U2l6ZS53aWR0
aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkpOworCisgICAgZmxvYXQgc2Nyb2xsUG9z
aXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwLjBmKTsKKyAgICBzY3JvbGxQ
b3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIGNvbnRlbnRTaXplLmhlaWdodCgp
IC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChz
Y3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7Cit9CisKK0xheWVyVHJlZVJlbmRlcmVy
OjpMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVD
b29yZGluYXRvclByb3h5KQorICAgIDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRXZWJMYXll
cklEKQorICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKK3sKK30KKworTGF5ZXJUcmVlUmVuZGVyZXI6
On5MYXllclRyZWVSZW5kZXJlcigpCit7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cih0aGlzKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVy
TGF5ZXIobmV3TGF5ZXIpOworICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVG
cm9tTGF5ZXIoZmFsc2UpOworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcFJlY3QsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3Rl
eHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xN
b2RlKTsKKworICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKKyAgICBHcmFwaGlj
c0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50
Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxh
eWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAo
IWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlciht
X3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGlu
ZyhQYWludEZsYWdzKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7CisKKyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3Bh
Y2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0
cml4KSB7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Cisg
ICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBj
dXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
KyAgICB9CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZENs
aXAoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCBwYWludGVyKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVy
KQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAg
ICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1h
cHBlcjo6U29mdHdhcmVNb2RlKTsKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7
CisKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3Jh
cGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVn
aW5QYWludGluZygpOworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+
ZW5kUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgw
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXplID0g
Y29udGVudHNTaXplOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50
c1JlY3QgPSByZWN0OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9y
dCgpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKK3sKKyAgICBp
ZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZp
eGVkIGxheWVyIHBvc2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2ViIHByb2Nlc3Mgd2hlbiB3
ZSB1cGRhdGUgdGhlIHZpc2libGUgY29udGVudHMgcmVjdCAvIHNjcm9sbCBwb3NpdGlvbi4KKyAg
ICAvLyBJZiB3ZSB3YW50IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNjdXJhdGVseSB0aGUgdmll
d3BvcnQgd2hlbiB3ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZXMsIHdlIGhh
dmUgdG8gb2Zmc2V0CisgICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY3VycmVu
dCBwb3NpdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9ydCB1c2VkIGZvciB0aGUg
bGFzdCBsYXlvdXQuCisgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3Jv
bGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSwgbV92aXNpYmxlQ29u
dGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgRmxvYXRQb2ludCByZW5kZXJlZFNjcm9s
bFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fcmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKKyAgICBG
bG9hdFNpemUgZGVsdGEgPSBzY3JvbGxQb3NpdGlvbiAtIHJlbmRlcmVkU2Nyb2xsUG9zaXRpb247
CisKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKKyAg
ICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+c2Vjb25kKS0+
c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKK30KKwordm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBv
c2l0aW9uOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVy
SUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBo
aWNzU3VyZmFjZVRva2VuKQoreworICAgIGlmIChjYW52YXNTaXplLmlzRW1wdHkoKSB8fCAhbV90
ZXh0dXJlTWFwcGVyKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckJ5SUQoaWQpOworCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3Jl
PiBjYW52YXNCYWNraW5nU3RvcmU7CisgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQoaWQpOworICAgIGlmIChpdCA9PSBt
X3N1cmZhY2VCYWNraW5nU3RvcmVzLmVuZCgpKSB7CisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9y
ZSA9IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAg
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdTdG9yZSk7CisgICAg
fSBlbHNlCisgICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT5zZWNvbmQ7CisKKyAgICBj
YW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tl
biwgY2FudmFzU2l6ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNr
aW5nU3RvcmUuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dExheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBj
aGlsZElEcykKK3sKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+
c2Vjb25kOworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxh
eWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOworICAgICAgICBHcmFwaGljc0xheWVyKiBjaGls
ZCA9IGxheWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgaWYgKCFjaGlsZCkgeworICAgICAgICAg
ICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBt
X2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkcmVu
LmFwcGVuZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7
Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycykKK3sKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsK
KworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKKyAgICBsYXllci0+c2V0
RmlsdGVycyhmaWx0ZXJzKTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZv
KQoreworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBt
X2xheWVycy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOworCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworCisgICAgbGF5ZXItPnNldFJl
cGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVy
LT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+
c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZv
LnNpemUpOworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7Cisg
ICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5
ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7Cisg
ICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxl
KTsKKyAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVl
KTsKKyAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOwor
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisgICAg
bGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKKyAg
ICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0
KGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpOworCisgICAgaWYgKGxheWVySW5mby5maXhlZFRv
Vmlld3BvcnQpCisgICAgICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7CisgICAgZWxz
ZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7CisKKyAgICBhc3NpZ25JbWFnZVRv
TGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5l
dmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5k
cyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRz
KTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXIt
PnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgaWYgKGxheWVySW5m
by5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290TGF5
ZXJJRChpZCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKFdlYkxh
eWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChs
YXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+
cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBt
X2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyNlbmRpZgorICAg
IGRlbGV0ZSBsYXllcjsKK30KKworCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVMYXll
cihXZWJMYXllcklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVy
J3MgcG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93blB0
ciBpcyBub3QgY29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJz
LmVuZCgpKQorICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRy
KCkpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXll
cklEIGxheWVySUQpCit7CisgICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJRCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7CisKKyAgICBtX3Jvb3RM
YXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlmICghbGF5ZXJJRCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKGxheWVyKTsKK30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
TGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQoreworICAg
IFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5
SUQoaWQpKTsKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3Jl
KSB7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVh
dGUoKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkp
OworICAgIH0KKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0
b3JlOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZ2V0QmFja2luZ1N0b3Jl
KGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sK
KyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKK30KKwor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3sKKyAgICBSZWZQdHI8Q29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklE
KTsKKyAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVj
dCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5zdXJmYWNlLCB1cGRhdGUub2Zmc2V0KTsKKyAg
ICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwg
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCit7CisgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNl
dChpbWFnZUlELCBiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVu
dHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwor
fQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlE
KQoreworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30K
Kwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCit7CisgICAgaWYgKCFpbWFnZUlEKSB7CisgICAg
ICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
PiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJ
RCk7CisgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsK
KyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCit7CisgICAgSGFz
aFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwor
CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3JlbmRl
cmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3Jv
bGxQb3NpdGlvbjsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9h
dFJlY3QoKSk7CisgICAgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKKworICAgIC8vIFRoZSBwZW5k
aW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdl
YiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCisgICAgY2FsbE9uTWFpblRocmVhZChi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgaWYgKG1fbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclBy
b3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5z
dXJlUm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikgeworICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgICAg
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNl
dEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyh0cnVlKTsKKyAgICB9CisKKyAgICBtX3Jv
b3RMYXllciA9IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAgICBtX3Jvb3RMYXll
ci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQz
RCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVy
byBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExheWVyLT5z
ZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1f
cm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCgpCit7Cisg
ICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwg
YXMgdGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXll
cigpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsg
KytpKQorICAgICAgICBtX3JlbmRlclF1ZXVlW2ldKCk7CisKKyAgICBtX3JlbmRlclF1ZXVlLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQor
eworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihy
b290TGF5ZXIoKSk7CisKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIGxheWVyLT5jbGVhckJhY2tp
bmdTdG9yZXNSZWN1cnNpdmUoKTsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNs
ZWFyKCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jbGVhcigpOworI2VuZGlmCisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBtX3Jvb3RMYXllci5jbGVhcigpOworICAgIG1fcm9vdExheWVySUQgPSBJbnZh
bGlkV2ViTGF5ZXJJRDsKKyAgICBtX2xheWVycy5jbGVhcigpOworICAgIG1fZml4ZWRMYXllcnMu
Y2xlYXIoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKKyAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIHNldEFjdGl2ZShmYWxzZSk7CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMsIHRoaXMpKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNr
aW5nU3RvcmVzKCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAg
ICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwor
fQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZXRhY2goKQoreworICAgIG1fbGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eSA9IDA7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVu
ZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoIW1f
aXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1
bmN0aW9uKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0QWN0aXZlKGJvb2wgYWN0
aXZlKQoreworICAgIGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSGF2ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KKyAgICAv
LyBJZiB0aGVyZSBhcmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRo
ZW4gdGhvc2UgdXBkYXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2Rl
CisgICAgLy8gYW5kIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3Rh
bmNlLgorICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZl
OworICAgIGlmIChtX2lzQWN0aXZlKQorICAgICAgICByZW5kZXJOZXh0RnJhbWUoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjNiZTM4YzU5
YzIyMGU1NWVhYjA4MTc5OGZiNTgwMDM3YjkxMzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIu
aApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRy
ZWVSZW5kZXJlcl9oCisjZGVmaW5lIExheWVyVHJlZVJlbmRlcmVyX2gKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJH
cmFwaGljc1N1cmZhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
aCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Cisj
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsKK2NsYXNzIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk7CitjbGFzcyBXZWJMYXllckluZm87CitjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87
CisKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PExheWVyVHJlZVJlbmRlcmVyPiwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQg
eworcHVibGljOgorICAgIHN0cnVjdCBUaWxlVXBkYXRlIHsKKyAgICAgICAgV2ViQ29yZTo6SW50
UmVjdCBzb3VyY2VSZWN0OworICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3Q7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBzdXJmYWNlOworICAgICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBvZmZzZXQ7CisgICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlU3VyZmFjZT4gbmV3U3VyZmFjZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG5l
d09mZnNldCkKKyAgICAgICAgICAgIDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAgICAgICAs
IHRhcmdldFJlY3QodGFyZ2V0KQorICAgICAgICAgICAgLCBzdXJmYWNlKG5ld1N1cmZhY2UpCisg
ICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
IH07CisgICAgTGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSopOwor
ICAgIHZpcnR1YWwgfkxheWVyVHJlZVJlbmRlcmVyKCk7CisgICAgdm9pZCBwdXJnZUdMUmVzb3Vy
Y2VzKCk7CisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0gMCk7CisgICAgdm9pZCBwYWludFRv
R3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwor
ICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3lu
Y0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworCisgICAgdm9pZCBkZXRhY2goKTsKKyAg
ICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydCgpOworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworCisgICAgdm9pZCBk
ZWxldGVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkxheWVy
SUQpOworICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8
V2ViTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3Qg
V2ViTGF5ZXJJbmZvJik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5
ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsK
KyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2Nh
bGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBk
YXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4pOworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwor
Citwcml2YXRlOgorICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5
SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAg
OiBtX2xheWVycy5nZXQoaWQpOyB9CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExh
eWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50
YXRpb25zIGZyb20gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwg
ZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9y
ZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSB7IH0KKyAgICB2b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2
b2lkKCk+Jik7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExh
eWVyTWFwOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworCisgICAgLy8gUmVuZGVyIHF1
ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWludE5v
ZGUgY2FsbCBzdGFjayEKKyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVl
dWU7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKyAgICBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7CisgICAgSGFzaE1hcDxpbnQ2
NF90LCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVj
dGx5Q29tcG9zaXRlZEltYWdlczsKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7CisjZW5kaWYKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwg
UmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1cmZh
Y2VCYWNraW5nU3RvcmVNYXA7CisgICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzOworI2VuZGlmCisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgp
OworICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VU
b0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZv
aWQgZW5zdXJlUm9vdExheWVyKCk7CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsK
KyAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9u
cygpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKKworICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTsKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290
TGF5ZXI7CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisKKyAgICBM
YXllck1hcCBtX2xheWVyczsKKyAgICBMYXllck1hcCBtX2ZpeGVkTGF5ZXJzOworICAgIFdlYkxh
eWVySUQgbV9yb290TGF5ZXJJRDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3BlbmRpbmdSZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisgICAgYm9vbCBtX2lzQWN0aXZlOworfTsKKwor
fTsKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIExh
eWVyVHJlZVJlbmRlcmVyX2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5jcHAKaW5kZXggNWY3YjEwNjU0NzE0Nzc3NjY3NzQyMmU3YWI2ZmNlMTBiNGQ3
NTI1Ni4uNzllNjEwZTk2MWRjZGZlYzVlODg5NzRmZjE5NjQzN2FkOGM1NTUzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKLSNpZiBVU0UoVUlfU0lERV9DT01Q
T1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgPENvcmVJUEMvTWVzc2FnZUlELmg+CiAj
ZW5kaWYKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5OjpzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIHNjcm9sbE9mZnNldCkKICAgICBzaXpl
RGlkQ2hhbmdlKCk7CiB9CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZVZpZXdw
b3J0KCkKIHsKICAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld05lZWRzRGlzcGxheSh2aWV3cG9y
dFZpc2libGVSZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5LmgKaW5kZXggOTk0NjBlNDk5YTAzYzkzYWJiNThiYzNmM2RlZmIwZTkzYzNlMWRkNC4uNWMy
ZDUwOGM0NjBiMThmOGQ4MjJhMmFiNjJjYzBlYWIxMzcwNGViYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBjb2xvclNwYWNlRGlkQ2hhbmdlKCkgeyB9CiAKLSNpZiBVU0Uo
VUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHZpZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCB7IHJldHVybiBjb250ZW50c1JlY3QoKTsg
fQogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb250ZW50c1JlY3QoKSBjb25zdDsKQEAg
LTExMyw3ICsxMTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAotI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBPd25QdHI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4gbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5Owog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuY3BwCmluZGV4IGNkOGM1ZjYyOWZhNzNlMTk1ZjAzYzM5NjczZDQ1MTE2NTNkZTAyNjMu
LmNkOWNhZmMxNzY0YzQ3NWRhN2JkYWRkNzdiZDAyZmQwNjNlYmE5OTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMzYsNyAr
MzYsNyBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVnaW9uLmg+CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgog
I2VuZGlmCiAKQEAgLTU4LDcgKzU4LDcgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdB
cmVhUHJveHlJbXBsKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogICAgICwgbV9pc0JhY2tp
bmdTdG9yZURpc2NhcmRhYmxlKHRydWUpCiAgICAgLCBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1l
cihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlzY2Fy
ZEJhY2tpbmdTdG9yZSkKIHsKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0
byBhbGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBp
cyBlbnRlcmVkIHRoZXJlLgogICAgIGlmICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5mb3JjZUNvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICBtX2xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0
aGlzKSk7CkBAIC0zNTMsMTMgKzM1MywxMyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAg
IG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXll
clRyZWVDb250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBpZiAoIW1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSkKICAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gYWRv
cHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkodGhpcykpOwogI2VuZGlmCiB9CiAK
LSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQ
Qzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVu
dHMpCiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggMTlhNzcxZjJj
YjU3NjFjN2M0ZmMxMGI3NzEwZGJmN2UyMDU3NzQ0Zi4uMGM5ZjA0ZjhlMDJkYThmMGNkYmMwYTMw
MTBmNWYwNDFmYTMzOTk4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmgKQEAgLTgxLDcgKzgxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
aXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gIW1fbGF5ZXJU
cmVlQ29udGV4dC5pc0VtcHR5KCk7IH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1Jl
Y3QsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBhZWUzMjQwNDI0MWI0MDFlZWQ5ZTVmZTI1NTk5ODM3NmM5NTJjM2Y4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCAr
MCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBV
U0UoVUlfU0lERV9DT01QT1NJVElORykKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmgiCi0KLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2VzLmgiCi0jaW5j
bHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5k
ZXJlci5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQ
cm94eS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQ
cm94eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXIodGhpcykpKQotICAgICwgbV9sYXN0U2VudFNjYWxlKDApCi17Ci19
Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5
KCkKLXsKLSAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5
LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAg
IG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxl
SUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1
cmZhY2U7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaW50IHRva2VuID0gdXBkYXRl
SW5mby5zdXJmYWNlSGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7Ci0gICAgaWYgKHRva2Vu
KSB7Ci0gICAgICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+
OjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh0b2tlbik7Ci0gICAgICAgIGlmIChpdCA9
PSBtX3N1cmZhY2VzLmVuZCgpKSB7Ci0gICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3Vy
ZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7Ci0gICAgICAgICAgICBtX3N1
cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
c3VyZmFjZSA9IGl0LT5zZWNvbmQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN1cmZhY2UgPSBTaGFy
ZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSNlbHNlCi0g
ICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VI
YW5kbGUpOwotI2VuZGlmCi0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJn
ZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJl
bmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOwotICAgIHVw
ZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwg
Y29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldl
YkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwg
aW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0
aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4m
IGNoaWxkcmVuKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRMYXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwg
ZmlsdGVycykpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
ZGlkUmVuZGVyRnJhbWUoKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVw
ZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3Jl
YXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOwotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9yZW5k
ZXJlci5nZXQoKSwga2V5LCBiaXRtYXApKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFn
ZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250
ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkpOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZl
Y3RvcikKLXsKLSAgICAvLyBJbmZvcm0gdGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1m
aXhlZCBsYXllcnMuCi0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QpKTsKLQot
ICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3Vy
ZSB0aGF0IGl0cyBzaXplIHN0YXlzIHRoZSBzYW1lIHdoaWxlIHBhbm5pbmcuIFRoaXMgY2FuIGhh
dmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCi0gICAgSW50UmVjdCByb3VuZGVkUmVjdCA9IHJv
dW5kZWRJbnRSZWN0KHJlY3QpOwotICAgIGlmIChyb3VuZGVkUmVjdCA9PSBtX2xhc3RTZW50Vmlz
aWJsZVJlY3QgJiYgc2NhbGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3Ig
PT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yOjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJvdW5kZWRSZWN0LCBzY2Fs
ZSwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7Ci0gICAgbV9sYXN0U2VudFZpc2libGVSZWN0ID0gcm91bmRlZFJlY3Q7Ci0gICAgbV9sYXN0
U2VudFNjYWxlID0gc2NhbGU7Ci0gICAgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IgPSB0cmFq
ZWN0b3J5VmVjdG9yOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRl
ck5leHRGcmFtZSgpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlJlbmRlck5leHRGcmFtZSgp
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0
aW9uKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyh1
aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NT
dXJmYWNlVG9rZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBncmFw
aGljc1N1cmZhY2VUb2tlbikpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OnB1cmdlQmFja2luZ1N0b3JlcygpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlB1cmdlQmFj
a2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQot
Ci19Ci0jZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkMzNhODEwNTY5YzgxYTk5ZjhiMmZhYWUwNDc0NGNjMTJj
ZjdlZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyAvZGV2
L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXll
clRyZWVDb29yZGluYXRvclByb3h5X2gKLSNkZWZpbmUgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eV9oCi0KLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKLQotI2luY2x1ZGUgIkJhY2tpbmdT
dG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJSZWdpb24u
aCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJl
ZUluZm8uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3Mg
UVNHTm9kZTsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOwotY2xhc3MgV2ViTGF5
ZXJVcGRhdGVJbmZvOwotCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLXB1Ymxp
YzoKLSAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAg
ICB2aXJ0dWFsIH5MYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7Ci0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAg
dm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9y
PFdlYkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwotI2VuZGlmCi0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxh
eWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0g
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHB1cmdlR0xS
ZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKLSAgICB2b2lkIGNyZWF0
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9y
TGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKGlu
dCBsYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2b2lkIGNyZWF0ZURpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlKGludDY0X3QsIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmKTsK
LSAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90KTsKLSAgICB2
b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
KTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUo
KTsKLSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwb3NpdGlvbik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tl
bik7Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBXZWJMYXllclRyZWVSZW5k
ZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgp
OyB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsK
LSAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0gICAgV2ViQ29y
ZTo6SW50UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0U2VudFNj
YWxlOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3I7
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+ID4gbV9zdXJmYWNlczsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5k
aWYKLQotI2VuZGlmIC8vIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4NGI5MTViZDg2
ZjU2NWMxY2I2ZmFjMDIwYTkzNjhiOTE5YmRiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAK
LSMKLSMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotbWVzc2FnZXMgLT4gTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eSB7Ci0gICAgU2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQz
Ml90IGlkLCBXZWJLaXQ6OldlYkxheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1
aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0g
ICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCi0gICAgRGVsZXRlQ29tcG9z
aXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBDcmVhdGVUaWxlRm9yTGF5ZXIodWludDMyX3Qg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6
OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgVXBkYXRlVGlsZUZvckxheWVyKHVp
bnQzMl90IGxheWVySUQsIGludCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGFyZ2V0UmVjdCwg
V2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFJlbW92ZVRpbGVGb3JM
YXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlEKQotICAgIENyZWF0ZURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZSkKLSAgICBEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkp
Ci0gICAgRGlkUmVuZGVyRnJhbWUoKQotICAgIERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNv
cmU6OkludFBvaW50IHBvc2l0aW9uKQotICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIFdlYkNv
cmU6OkludFNpemUgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCi19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRy
ZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJlMDk2YWViOGRjYTdh
OTBhMDgzZmI0NjA5NmIzNTZhYjc3OTUwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcp
Ci0KLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgot
I2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKLSNpbmNsdWRlICJNZXNzYWdl
SUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgotI2lu
Y2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgotI2luY2x1ZGUg
PHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi10ZW1wbGF0ZTxjbGFzcyBU
PiBjbGFzcyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXIgewotcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGNhbGwoUGFzc1JlZlB0cjxUPiBvYmplY3RUb0d1YXJkLCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxU
PiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4ob2JqZWN0VG9HdWFy
ZCwgZnVuY3Rpb24pOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGludm9rZSwgaW52b2tlcik7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcihQYXNzUmVm
UHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgbmV3RnVuY3Rpb24pCi0gICAg
ICAgIDogb2JqZWN0VG9HdWFyZChvYmplY3QpCi0gICAgICAgICwgZnVuY3Rpb24obmV3RnVuY3Rp
b24pCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxUPiBvYmplY3RUb0d1YXJkOwotICAgIEZ1
bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247Ci0gICAgc3RhdGljIHZvaWQgaW52b2tlKHZvaWQqIGRh
dGEpCi0gICAgewotICAgICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIg
PSBzdGF0aWNfY2FzdDxNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qPihkYXRhKTsKLSAgICAg
ICAgaW52b2tlci0+ZnVuY3Rpb24oKTsKLSAgICAgICAgZGVsZXRlIGludm9rZXI7Ci0gICAgfQot
fTsKLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAg
ICAgICAgZnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52
b2tlcjxXZWJMYXllclRyZWVSZW5kZXJlcj46OmNhbGwodGhpcywgZnVuY3Rpb24pOwotfQotCi1z
dGF0aWMgRmxvYXRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25z
dCBGbG9hdFNpemUmIGNvbnRlbnRTaXplKQotewotICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWCA9
IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMC4wZik7Ci0gICAgc2Nyb2xsUG9zaXRpb25Y
ID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlzaWJs
ZUNvbnRlbnRSZWN0LndpZHRoKCkpOwotCi0gICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25ZID0gc3Rk
OjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwLjBmKTsKLSAgICBzY3JvbGxQb3NpdGlvblkgPSBz
dGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlzaWJsZUNv
bnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICByZXR1cm4gRmxvYXRQb2ludChzY3JvbGxQb3NpdGlv
blgsIHNjcm9sbFBvc2l0aW9uWSk7Ci19Ci0KLVdlYkxheWVyVHJlZVJlbmRlcmVyOjpXZWJMYXll
clRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGlu
YXRvclByb3h5KQotICAgIDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkpCi0gICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRXZWJMYXllcklEKQot
ICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKLXsKLX0KLQotV2ViTGF5ZXJUcmVlUmVuZGVyZXI6On5X
ZWJMYXllclRyZWVSZW5kZXJlcigpCi17Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4g
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsK
LSAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcih0aGlzKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFw
cGVyTGF5ZXIobmV3TGF5ZXIpOwotICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3Rv
cmVGcm9tTGF5ZXIoZmFsc2UpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Ci19Ci0K
LXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0
UmVjdCYgY2xpcFJlY3QsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKLXsK
LSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgIEFTU0VS
VChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpP
cGVuR0xNb2RlKTsKLQotICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKLSAgICBH
cmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFj
dXJyZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJlTWFwcGVyTGF5
ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7Ci0KLSAg
ICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5Q
YWludGluZyhQYWludEZsYWdzKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXll
ci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkg
IT0gbWF0cml4KSB7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0
eSk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKLSAgICB9Ci0KLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVNYXBwZXIt
PmVuZENsaXAoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci19Ci0KLXZv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0
b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBwYWludGVyKQotewotICAgIGlmICghbV90ZXh0
dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0g
VGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29udGVudCgpOwot
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290
TGF5ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBl
ci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+YmVnaW5QYWludGluZygpOwotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNz
Q29udGV4dCgwKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNT
aXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIG1fY29u
dGVudHNTaXplID0gY29udGVudHNTaXplOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBt
X3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjp1cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSkKLSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT51cGRhdGVWaWV3cG9y
dCgpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjphZGp1c3RQb3NpdGlvbkZvckZp
eGVkTGF5ZXJzKCkKLXsKLSAgICBpZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEZpeGVkIGxheWVyIHBvc2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0
aGUgd2ViIHByb2Nlc3Mgd2hlbiB3ZSB1cGRhdGUgdGhlIHZpc2libGUgY29udGVudHMgcmVjdCAv
IHNjcm9sbCBwb3NpdGlvbi4KLSAgICAvLyBJZiB3ZSB3YW50IHRob3NlIGxheWVycyB0byBmb2xs
b3cgYWNjdXJhdGVseSB0aGUgdmlld3BvcnQgd2hlbiB3ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBw
cm9jZXNzIHVwZGF0ZXMsIHdlIGhhdmUgdG8gb2Zmc2V0Ci0gICAgLy8gdGhlbSBieSB0aGUgZGVs
dGEgYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2
aWV3cG9ydCB1c2VkIGZvciB0aGUgbGFzdCBsYXlvdXQuCi0gICAgRmxvYXRQb2ludCBzY3JvbGxQ
b3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9j
YXRpb24oKSwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxv
YXRQb2ludCByZW5kZXJlZFNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1f
cmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1f
Y29udGVudHNTaXplKTsKLSAgICBGbG9hdFNpemUgZGVsdGEgPSBzY3JvbGxQb3NpdGlvbiAtIHJl
bmRlcmVkU2Nyb2xsUG9zaXRpb247Ci0KLSAgICBMYXllck1hcDo6aXRlcmF0b3IgZW5kID0gbV9m
aXhlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4
ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB0b1RleHR1cmVNYXBw
ZXJMYXllcihpdC0+c2Vjb25kKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRh
KTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIG1fcGVuZGluZ1JlbmRlcmVkQ29u
dGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjpzeW5jQ2FudmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKQotewotICAgIGlmIChj
YW52YXNTaXplLmlzRW1wdHkoKSB8fCAhbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAg
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0gICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBjYW52YXNCYWNraW5nU3RvcmU7Ci0gICAgU3Vy
ZmFjZUJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVz
LmZpbmQoaWQpOwotICAgIGlmIChpdCA9PSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmVuZCgpKSB7
Ci0gICAgICAgIGNhbnZhc0JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2lu
Z1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQs
IGNhbnZhc0JhY2tpbmdTdG9yZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZhc0JhY2tpbmdT
dG9yZSA9IGl0LT5zZWNvbmQ7Ci0KLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNz
U3VyZmFjZShncmFwaGljc1N1cmZhY2VUb2tlbiwgY2FudmFzU2l6ZSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwotI2VuZGlmCi19Ci0K
LXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBp
ZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGlsZElEcykKLXsKLSAgICBlbnN1cmVMYXll
cihpZCk7Ci0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4gY2hpbGRyZW47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkSURz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ld
OwotICAgICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAg
ICAgICAgaWYgKCFjaGlsZCkgewotICAgICAgICAgICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGls
ZElEKS5sZWFrUHRyKCk7Ci0gICAgICAgICAgICBtX2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQp
OwotICAgICAgICB9Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgfQotICAg
IGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJ
RCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBlbnN1cmVMYXll
cihpZCk7Ci0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0g
ICAgQVNTRVJUKGl0ICE9IG1fbGF5ZXJzLmVuZCgpKTsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gaXQtPnNlY29uZDsKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKLX0KLSNl
bmRpZgotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKFdlYkxheWVy
SUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQotewotICAgIGVuc3VyZUxheWVy
KGlkKTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKLSAg
ICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBpdC0+c2Vjb25kOwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVy
QnlJRChsYXllckluZm8ucmVwbGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJC
eUlEKGxheWVySW5mby5tYXNrKSk7Ci0KLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZv
LnBvcyk7Ci0gICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotICAgIGxheWVyLT5z
ZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEFuY2hvclBv
aW50KGxheWVySW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNm
b3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNl
VmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29u
dGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29u
dGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOwotICAgIGxheWVyLT5zZXREcmF3c0Nv
bnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlz
aWJsZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmll
d3BvcnQpOwotCi0gICAgaWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCi0gICAgICAgIG1f
Zml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ZpeGVkTGF5
ZXJzLnJlbW92ZShpZCk7Ci0KLSAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5m
by5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLQotICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5
ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5
ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKLSAgICBsYXllci0+c2V0T3Bh
Y2l0eShsYXllckluZm8ub3BhY2l0eSk7Ci0gICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVy
SW5mby5wcmVzZXJ2ZXMzRCk7Ci0gICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAmJiBtX3Jv
b3RMYXllcklEICE9IGlkKQotICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7Ci19Ci0KLXZvaWQg
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsK
LSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAo
IWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgp
OwotICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92
ZShsYXllcklEKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNr
aW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKLSNlbmRpZgotICAgIGRlbGV0ZSBsYXllcjsKLX0K
LQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVMYXllcihXZWJMYXllcklEIGlk
KQotewotICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9pbnRlciBhbmQg
bWFuYWdlIGl0IG91cnNlbHZlcywKLSAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBub3QgY29weWFi
bGUuCi0gICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgpKQotICAgICAg
ICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOwotfQotCi12b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklEIGxheWVySUQp
Ci17Ci0gICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0KLSAgICBtX3Jvb3RMYXllci0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKLQotICAgIGlmICghbGF5ZXJJRCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgaWYgKCFs
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVy
KTsKLX0KLQotUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQotewotICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKLSAgICBB
U1NFUlQobGF5ZXIpOwotICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCku
Z2V0KCkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0gICAgICAgIGJhY2tpbmdTdG9yZSA9
IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbGF5ZXItPnNldEJhY2tpbmdT
dG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOwotICAgIH0KLSAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
KTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2Nh
bGUpCi17Ci0gICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwg
c2NhbGUpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJ
RCktPnJlbW92ZVRpbGUodGlsZUlEKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRh
dGUmIHVwZGF0ZSkKLXsKLSAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRp
bGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRhcmdldFJlY3QsIHVwZGF0ZS5z
dXJmYWNlLCB1cGRhdGUub2Zmc2V0KTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IHdlYWtCaXRtYXApCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vh
a0JpdG1hcDsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAg
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwot
ICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBi
aXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQotewotICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGlt
YWdlSUQpCi17Ci0gICAgaWYgKCFpbWFnZUlEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50
c1RvTWVkaWEoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPGludDY0
X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9
IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgpKTsKLSAgICBsYXllci0+c2V0Q29udGVu
dHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRl
cmVyOjpjb21taXRUaWxlT3BlcmF0aW9ucygpCi17Ci0gICAgSGFzaFNldDxSZWZQdHI8TGF5ZXJC
YWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3Jl
PiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9u
cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNo
TGF5ZXJDaGFuZ2VzKCkKLXsKLSAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9
IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLQotICAgIG1fcm9vdExh
eWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Ci0gICAgY29tbWl0VGlsZU9w
ZXJhdGlvbnMoKTsKLQotICAgIC8vIFRoZSBwZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3
YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4
dCBvbmUuCi0gICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6
cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSkKLSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5yZW5kZXJOZXh0RnJhbWUo
KTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKLXsK
LSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fdGV4dHVy
ZU1hcHBlcikgewotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyh0cnVlKTsKLSAgICB9Ci0KLSAgICBtX3Jvb3RMYXllciA9IGNyZWF0ZUxh
eWVyKEludmFsaWRXZWJMYXllcklEKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5k
cyhmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAg
bV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7Ci0KLSAg
ICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3Vs
ZCBiZSBvcHRpbWl6ZWQgb3V0LgotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgx
LjAsIDEuMCkpOwotICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1
ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJl
IGFuIGFjdGl2ZSBHTCBjb250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICBt
X3JlbmRlclF1ZXVlW2ldKCk7Ci0KLSAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci19Ci0KLXZv
aWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7
Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1
cnNpdmUoKTsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigp
OwotI2VuZGlmCi0KLSAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBt
X3Jvb3RMYXllci5jbGVhcigpOwotICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkV2ViTGF5ZXJJ
RDsKLSAgICBtX2xheWVycy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKLSAg
ICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGlu
Z0J1ZmZlcnMuY2xlYXIoKTsKLQotICAgIHNldEFjdGl2ZShmYWxzZSk7Ci0KLSAgICBjYWxsT25N
YWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMs
IHRoaXMpKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3Rv
cmVzKCkKLXsKLSAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQotICAgICAgICBt
X2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotfQotCi12
b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXRhY2goKQotewotICAgIG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSA9IDA7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVu
ZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoIW1f
aXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1
bmN0aW9uKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0QWN0aXZlKGJvb2wg
YWN0aXZlKQotewotICAgIGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSGF2ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KLSAg
ICAvLyBJZiB0aGVyZSBhcmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9u
IHRoZW4gdGhvc2UgdXBkYXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBu
b2RlCi0gICAgLy8gYW5kIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGlu
c3RhbmNlLgotICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKLSAgICBtX2lzQWN0aXZlID0gYWN0
aXZlOwotICAgIGlmIChtX2lzQWN0aXZlKQotICAgICAgICByZW5kZXJOZXh0RnJhbWUoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODE1MmU0MDgzYjQyM2U5ZDM2ODQ3
NmI0ZTNmMGJhZThkNGI0ZDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lm
bmRlZiBXZWJMYXllclRyZWVSZW5kZXJlcl9oCi0jZGVmaW5lIFdlYkxheWVyVHJlZVJlbmRlcmVy
X2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZVN1
cmZhY2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIExheWVyQmFja2luZ1N0b3JlOwotY2xhc3MgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTsKLWNsYXNzIFdlYkxheWVySW5mbzsKLWNsYXNzIFdlYkxheWVy
VXBkYXRlSW5mbzsKLQotY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFRpbGVVcGRhdGUgewotICAg
ICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6OkludFJl
Y3QgdGFyZ2V0UmVjdDsKLSAgICAgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7
Ci0gICAgICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRh
cmdldCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBuZXdTdXJmYWNlLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgbmV3T2Zmc2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJj
ZSkKLSAgICAgICAgICAgICwgdGFyZ2V0UmVjdCh0YXJnZXQpCi0gICAgICAgICAgICAsIHN1cmZh
Y2UobmV3U3VyZmFjZSkKLSAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgfTsKLSAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVD
b29yZGluYXRvclByb3h5Kik7Ci0gICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKTsK
LSAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3Mg
PSAwKTsKLSAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCk7Ci0gICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOwotICAg
IHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZv
aWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b3NpdGlvbik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7Ci0K
LSAgICB2b2lkIGRldGFjaCgpOwotICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBzZXRBY3Rp
dmUoYm9vbCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQpOwotICAgIHZvaWQg
c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKFdl
YkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOwotICAgIHZvaWQgc2V0TGF5ZXJT
dGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVy
SUQsIGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGls
ZVVwZGF0ZSYpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0
ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBk
ZXN0cm95SW1hZ2UoaW50NjRfdCk7Ci0KLXByaXZhdGU6Ci0gICAgUGFzc093blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKLQotICAgIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0g
SW52YWxpZFdlYkxheWVySUQpID8gMCA6IG1fbGF5ZXJzLmdldChpZCk7IH0KLSAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsg
fQotCi0gICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZp
cnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENv
dW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
LCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotICAgIHZvaWQgY2FsbE9uTWFp
blRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2b2lkIGFkanVzdFBvc2l0aW9u
Rm9yRml4ZWRMYXllcnMoKTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1f
Y29udGVudHNTaXplOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0KLSAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4g
dGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5jdGlv
bjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAg
ICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotICAgIFBh
c3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsK
LSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwotICAgIEhhc2hTZXQ8UmVmUHRy
PExheWVyQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsK
LSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxX
ZWJMYXllcklELCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKLSAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFw
IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2NoZWR1bGVXZWJW
aWV3VXBkYXRlKCk7Ci0gICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBh
c3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJ
RCk7Ci0gICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKLSAgICB2b2lkIGVuc3VyZUxheWVyKFdl
YkxheWVySUQpOwotICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKLSAgICB2b2lkIHN5
bmNBbmltYXRpb25zKCk7Ci0gICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5OwotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX3Jvb3RMYXllcjsKLSAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0
ZTsKLQotICAgIExheWVyTWFwIG1fbGF5ZXJzOwotICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7
Ci0gICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIFdlYkNvcmU6OkludFBvaW50IG1f
cmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIFdlYkNvcmU6OkludFBvaW50IG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBib29sIG1faXNBY3Rp
dmU7Ci19OwotCi19OwotCi0jZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0KLSNl
bmRpZiAvLyBXZWJMYXllclRyZWVSZW5kZXJlcl9oCi0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBmZDBjMGVhY2I5NDM3YTc5ZjNiODBhNzA5MjM2MzFi
ZWU2NDg4NDFmLi41YzUyMmMwNmZhNTc1ZDc2Mzc2ZTdjMTAzMjlkNDdjODNjZTg2MTExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtOTQsNyArOTQsNyBA
QAogI2luY2x1ZGUgIldlYkludGVudFNlcnZpY2VJbmZvLmgiCiAjZW5kaWYKIAotI2lmIFVTRShV
SV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgogCkBAIC0x
NzQ3LDcgKzE3NDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQogICAgIGlmIChtZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNz
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4oKSkgewogICAgICAgICBtX2RyYXdpbmdBcmVhLT5k
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBhcmd1bWVudHMpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwCmluZGV4IDRkZTc3ZjcwYTM5NWM2YTEx
MzU0NjgxNmFjOTU0OTg3NTU4NjVhODkuLmViNzAyMzk5MDE5NDk2MWM5ZGI4M2Y1ZTYzZDQxZDBi
MGNiNDkyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VTR05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VT
R05vZGUuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiUXRXZWJQYWdlU0dOb2RlLmgiCiAKLSNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5o
IgorI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSA8UXRHdWkvUVBvbHln
b25GPgogI2luY2x1ZGUgPFF0UXVpY2svUVNHU2ltcGxlUmVjdE5vZGU+CiAjaW5jbHVkZSA8cHJp
dmF0ZS9xc2dyZW5kZXJub2RlX3AuaD4KQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIENvbnRlbnRzU0dOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogcHVi
bGljOgotICAgIENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
IHJlbmRlcmVyKQorICAgIENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVy
ZXI+IHJlbmRlcmVyKQogICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCiAgICAgewogICAg
ICAgICBsYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CkBAIC02MSw3ICs2MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNl
cygpOwogICAgIH0KIAotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBMYXllclRyZWVSZW5k
ZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgp
OyB9CiAKIHByaXZhdGU6CiAgICAgUVJlY3RGIGNsaXBSZWN0KCkgY29uc3QKQEAgLTEwNSw3ICsx
MDUsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVzdWx0UmVjdDsKICAgICB9CiAKLSAg
ICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPExh
eWVyVHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOwogfTsKIAogUXRXZWJQYWdlU0dOb2RlOjpRdFdl
YlBhZ2VTR05vZGUoKQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUXRXZWJQYWdlU0dOb2RlOjpz
ZXRTY2FsZShmbG9hdCBzY2FsZSkKICAgICBzZXRNYXRyaXgobWF0cml4KTsKIH0KIAotdm9pZCBR
dFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVy
ZXI+IHJlbmRlcmVyKQordm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQ
dHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQogewogICAgIGlmIChtX2NvbnRlbnRzTm9k
ZSAmJiBtX2NvbnRlbnRzTm9kZS0+bGF5ZXJUcmVlUmVuZGVyZXIoKSA9PSByZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVNHTm9kZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNH
Tm9kZS5oCmluZGV4IDIyYTViY2ZiYWVjMjBhYjgzNGM4ODc4NWE3M2FhYjU3NjU1NTY4ODYuLjEx
ZDE4OTg0ZWRhMWU4ODE3OTBmOTJlYjljYTJkMWFiMWVmNDk5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKQEAgLTMxLDE0ICszMSwxNCBAQCBR
VF9FTkRfTkFNRVNQQUNFCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVudHNTR05v
ZGU7Ci1jbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlcjsKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVy
OwogCiBjbGFzcyBRdFdlYlBhZ2VTR05vZGUgOiBwdWJsaWMgUVNHVHJhbnNmb3JtTm9kZSB7CiAg
ICAgcHVibGljOgogICAgICAgICBRdFdlYlBhZ2VTR05vZGUoKTsKICAgICAgICAgdm9pZCBzZXRC
YWNrZ3JvdW5kKGNvbnN0IFFSZWN0RiYsIGNvbnN0IFFDb2xvciYpOwogICAgICAgICB2b2lkIHNl
dFNjYWxlKGZsb2F0KTsKLSAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihQYXNzUmVmUHRyPFdlYkxh
eWVyVHJlZVJlbmRlcmVyPik7CisgICAgICAgIHZvaWQgc2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxM
YXllclRyZWVSZW5kZXJlcj4pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29udGVudHNTR05v
ZGUqIG1fY29udGVudHNOb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3RleG1hcC9MYXllckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
dGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDNkYmUwY2JhNTFjYjc0NDJjZGJjNDc4YWJlYjFlYWY3NGUwOTVjZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2MyAr
MCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCi0KLSNpZiBVU0UoVUlf
U0lERV9DT01QT1NJVElORykKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAi
U2hhcmVhYmxlU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi12b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBpZiAoIW1fc3Vy
ZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHRhcmdldFJlY3QobV90YXJn
ZXRSZWN0KTsKLSAgICB0YXJnZXRSZWN0LnNjYWxlKDEuIC8gbV9zY2FsZSk7Ci0gICAgYm9vbCBz
aG91bGRSZXNldCA9IGZhbHNlOwotICAgIGlmICh0YXJnZXRSZWN0ICE9IHJlY3QoKSkgewotICAg
ICAgICBzZXRSZWN0KHRhcmdldFJlY3QpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0g
ICAgfQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVyZSgp
OwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+
Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOwotICAg
ICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFJlc2V0KQot
ICAgICAgICB0ZXh0dXJlLT5yZXNldChtX3RhcmdldFJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPmZs
YWdzKCkgJiBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEgPyBCaXRtYXBUZXh0dXJlOjpT
dXBwb3J0c0FscGhhIDogMCk7Ci0KLSAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVy
ZSwgbV9zb3VyY2VSZWN0LCBtX3N1cmZhY2VPZmZzZXQpOwotICAgIG1fc3VyZmFjZS5jbGVhcigp
OwotfQotCi12b2lkIExheWVyQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJ
bnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICBtX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIG1fdGFyZ2V0UmVjdCA9IHRhcmdldFJl
Y3Q7Ci0gICAgbV9zdXJmYWNlT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3VyZmFjZSA9IGJ1ZmZl
cjsKLX0KLQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZShpbnQgaWQsIGZsb2F0
IHNjYWxlKQotewotICAgIG1fdGlsZXMuYWRkKGlkLCBMYXllckJhY2tpbmdTdG9yZVRpbGUoc2Nh
bGUpKTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6
OnJlbW92ZVRpbGUoaW50IGlkKQotewotICAgIG1fdGlsZXNUb1JlbW92ZS5hcHBlbmQoaWQpOwot
fQotCi0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUoaW50IGlkLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBQYXNzUmVmUHRy
PFNoYXJlYWJsZVN1cmZhY2U+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17
Ci0gICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7Ci0gICAg
aXQtPnNlY29uZC5pbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKLSAgICBpdC0+c2Vjb25kLnNldEJh
Y2tCdWZmZXIodGFyZ2V0UmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKLX0K
LQotUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBMYXllckJhY2tpbmdTdG9yZTo6dGV4dHVyZSgp
IGNvbnN0Ci17Ci0gICAgSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgTGF5
ZXJCYWNraW5nU3RvcmVUaWxlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSA9IGl0LT5zZWNvbmQudGV4dHVyZSgpOwotICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiB0ZXh0dXJlOwotICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+KCk7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZFNob3dUaWxlRGVidWdWaXN1YWxz
KCkKLXsKLSNpZiBQTEFURk9STShRVCkKLSAgICByZXR1cm4gKHFnZXRlbnYoIlFUX1dFQktJVF9T
SE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKSA9PSAiMSIpOwotI2VuZGlmCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNp
dHksIEJpdG1hcFRleHR1cmUqIG1hc2spCi17Ci0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxl
Kj4gdGlsZXNUb1BhaW50OwotCi0gICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUg
d2UgcGFpbnQsIGluIGNhc2UgdGhlIG9wYWNpdHkgaGFzIGNoYW5nZWQuCi0gICAgSGFzaE1hcDxp
bnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7
Ci0gICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OwotICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVy
QmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgTGF5ZXJCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnNl
Y29uZDsKLSAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmICh0aWxlLnNjYWxlKCkgPT0gbV9zY2FsZSkgewotICAgICAgICAgICAg
dGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7Ci0gICAgICAgICAgICBjb3ZlcmVkUmVjdC51bml0
ZSh0aWxlLnJlY3QoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE9ubHkgc2hvdyB0aGUgcHJldmlvdXMgdGlsZSBpZiB0aGUgb3BhY2l0eSBpcyBoaWdo
LCBvdGhlcndpc2UgZWZmZWN0IGxvb2tzIGxpa2UgYSBidWcuCi0gICAgICAgIC8vIFdlIHNob3cg
dGhlIHByZXZpb3VzLXNjYWxlIHRpbGUgYW55d2F5IGlmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHdp
dGggYW55IGN1cnJlbnQtc2NhbGUgdGlsZS4KLSAgICAgICAgaWYgKG9wYWNpdHkgPCAwLjk1ICYm
IGNvdmVyZWRSZWN0LmludGVyc2VjdHModGlsZS5yZWN0KCkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgdGlsZXNUb1BhaW50LnByZXBlbmQoJnRpbGUpOwotICAgIH0KLQotICAg
IC8vIFRPRE86IFdoZW4gdGhlIFRleHR1cmVNYXBwZXIgbWFrZXMgYSBkaXN0aW5jdGlvbiBiZXR3
ZWVuIHNvbWUgZWRnZXMgZXhwb3NlZCBhbmQgbm8gZWRnZXMKLSAgICAvLyBleHBvc2VkLCB0aGUg
dmFsdWUgcGFzc2VkIHNob3VsZCBiZSBhbiBhY2N1cmF0ZSByZWZsZWN0aW9uIG9mIHRoZSB0aWxl
IHN1YnNldCB0aGF0IHdlIGFyZQotICAgIC8vIHBhc3NpbmcuIEZvciBub3cgd2UganVzdCAiZXN0
aW1hdGUiIHNpbmNlIExheWVyQmFja2luZ1N0b3JlIGRvZXNuJ3Qga2VlcCBpbmZvcm1hdGlvbiBh
Ym91dAotICAgIC8vIHRoZSB0b3RhbCB0aWxlZCBzdXJmYWNlIHJlY3QgYXQgdGhlIG1vbWVudC4K
LSAgICB1bnNpZ25lZCBlZGdlc0V4cG9zZWQgPSBtX3RpbGVzLnNpemUoKSA+IDEgPyBUZXh0dXJl
TWFwcGVyOjpOb0VkZ2VzIDogVGV4dHVyZU1hcHBlcjo6QWxsRWRnZXM7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0aWxlc1RvUGFpbnQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVGV4dHVy
ZU1hcHBlclRpbGUqIHRpbGUgPSB0aWxlc1RvUGFpbnRbaV07Ci0gICAgICAgIHRpbGUtPnBhaW50
KHRleHR1cmVNYXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgZWRnZXNFeHBvc2VkKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgc2hvdWxkRGVidWcgPSBzaG91bGRTaG93VGlsZURlYnVnVmlz
dWFscygpOwotICAgICAgICBpZiAoIXNob3VsZERlYnVnKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihDb2xvcigweEZGLCAwLCAwKSwg
MiwgdGlsZS0+cmVjdCgpLCB0cmFuc2Zvcm0pOwotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3
UmVwYWludENvdW50ZXIoc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmVUaWxlKj4odGlsZSkt
PnJlcGFpbnRDb3VudCgpLCA4LCB0aWxlc1RvUGFpbnRbaV0tPnJlY3QoKS5sb2NhdGlvbigpLCB0
cmFuc2Zvcm0pOwotICAgIH0KLX0KLQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6Y29tbWl0VGls
ZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBWZWN0b3I8
aW50Pjo6aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxpbnQ+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1JlbW92ZS5iZWdp
bigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0KQotICAgICAgICBtX3RpbGVzLnJlbW92
ZSgqaXQpOwotICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOwotCi0gICAgSGFzaE1hcDxpbnQs
IExheWVyQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQo
KTsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7ICsraXQpCi0gICAgICAgIGl0
LT5zZWNvbmQuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4
bWFwL0xheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvdGV4bWFw
L0xheWVyQmFja2luZ1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGY1
MTNhMDViODkxMzk4MDkzZTY3YWJmNTExOTNhMWE5NmU1MDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1h
cC9MYXllckJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgTGF5ZXJCYWNraW5n
U3RvcmVfaAotI2RlZmluZSBMYXllckJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoVUlfU0lERV9D
T01QT1NJVElORykKLQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFNoYXJlYWJsZVN1cmZhY2U7Ci0KLWNsYXNzIExheWVy
QmFja2luZ1N0b3JlVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyVGlsZSB7Ci1w
dWJsaWM6Ci0gICAgTGF5ZXJCYWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKLSAgICAg
ICAgOiBUZXh0dXJlTWFwcGVyVGlsZShXZWJDb3JlOjpGbG9hdFJlY3QoKSkKLSAgICAgICAgLCBt
X3NjYWxlKHNjYWxlKQotICAgICAgICAsIG1fcmVwYWludENvdW50KDApCi0gICAgewotICAgIH0K
LQotICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLSAg
ICBpbmxpbmUgdm9pZCBpbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7ICsrbV9yZXBhaW50Q291bnQ7
IH0KLSAgICBpbmxpbmUgaW50IHJlcGFpbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWlu
dENvdW50OyB9Ci0gICAgdm9pZCBzd2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7
Ci0gICAgdm9pZCBzZXRCYWNrQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBidWZmZXIsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPFNoYXJlYWJs
ZVN1cmZhY2U+IG1fc3VyZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdGFyZ2V0UmVjdDsKLSAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX3N1cmZhY2VPZmZzZXQ7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLSAgICBpbnQgbV9yZXBhaW50
Q291bnQ7Ci19OwotCi1jbGFzcyBMYXllckJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKLXB1YmxpYzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUo
aW50LCBmbG9hdCk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKGludCk7Ci0gICAgdm9pZCB1cGRhdGVU
aWxlKGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTGF5ZXJCYWNraW5nU3RvcmUpOyB9Ci0gICAgdm9pZCBjb21taXRU
aWxlT3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0LCBXZWJDb3JlOjpCaXRtYXBUZXh0dXJlKik7Ci0KLXByaXZhdGU6Ci0gICAgTGF5ZXJCYWNr
aW5nU3RvcmUoKQotICAgICAgICA6IG1fc2NhbGUoMS4pCi0gICAgeyB9Ci0gICAgSGFzaE1hcDxp
bnQsIExheWVyQmFja2luZ1N0b3JlVGlsZT4gbV90aWxlczsKLSAgICBWZWN0b3I8aW50PiBtX3Rp
bGVzVG9SZW1vdmU7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotI2VuZGlmCi0KLSNlbmRpZiAvLyBMYXllckJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJp
CmluZGV4IDE3ZDU0OTNiMGFiM2FlOTQ4NGM0YmFiMDhmZDdmOGFiNTNiYWNmNzQuLjRmNDhjN2E0
NGY2MTdmNzU0NGE0YjY3YTBlOWY4MTA4ZmZkODM5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC0yNiw2
ICsyNiw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0FQ
SS9jcHAvcXQgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQVBJL3F0IFwKICAgICAkJFNP
VVJDRV9ESVIvVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uIFwKKyAgICAkJFNPVVJDRV9ESVIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3Mv
RG93bmxvYWRzIFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlciBc
CiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvcXQgXApAQCAtNTgs
NyArNTksNyBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L3F0IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlIFwKLSAgICAkJFNP
VVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yIFwKKyAgICAk
JFNPVVJDRV9ESVIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MgXAogICAg
ICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL3F0IFwKICAgICAkJFNPVVJDRV9ESVIvUGx1Z2luUHJv
Y2VzcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggM2FmNTk2NjI2YjE4ZTQyMmYwZDE0
YzBmMDBiNDQ2NmJjYTQzMzFhMC4uYzdmYzlhN2I3MzE5MmNiZTlmMzJlY2M4ODcxZjMwY2MzMDky
NGY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRk
ZW5VbnRpbE1vdXNlTW92ZXMpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAm
JiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnNjaGVkdWxlQW5pbWF0aW9uKCkKIHsKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgp
LT5sYXllclRyZWVIb3N0KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7CiAjZW5kaWYKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ4OWU3NGFjYTYwNmNmMDAyZmFjYjk1NWMzNTdjZGJkZmVkNmMyYWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0wLDAgKzEs
NzU4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiV2ViUGFnZS5oIgor
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoTWFwPFdlYkxheWVySUQsIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+JiBsYXllckJ5SURNYXAoKQoreworICAgIHN0YXRpYyBIYXNo
TWFwPFdlYkxheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKKyAg
ICByZXR1cm4gZ2xvYmFsTWFwOworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6bGF5ZXJCeUlEKFdlYktpdDo6V2ViTGF5ZXJJRCBpZCkKK3sK
KyAgICBIYXNoTWFwPFdlYkxheWVySUQsIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+JiB0YWJs
ZSA9IGxheWVyQnlJRE1hcCgpOworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gdGFibGUuZmluZChpZCk7CisgICAgaWYgKGl0
ID09IHRhYmxlLmVuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaXQtPnNlY29u
ZDsKK30KKworc3RhdGljIFdlYkxheWVySUQgdG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQoreworICAgIHJldHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxh
eWVyKS0+aWQoKSA6IDA7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRD
aGFuZ2VMYXllclN0YXRlKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsK
KyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQo
dGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDaGls
ZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VGaWx0ZXJzKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gdHJ1ZTsKKyAg
ICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhp
cyk7Cit9CisjZW5kaWYKKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAg
ICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNldFNob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0KCk7CisgICAgaWYgKHJlcGxpY2FMYXllcigpKQorICAgICAgICB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSktPnNldFNob3VsZFVwZGF0
ZVZpc2libGVSZWN0KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRD
aGFuZ2VHZW9tZXRyeSgpCit7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHNldFNo
b3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKKyAg
ICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQorICAgICwgbV9tYXNrVGFyZ2V0KDApCisgICAgLCBt
X2luVXBkYXRlTW9kZShmYWxzZSkKKyAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QodHJ1
ZSkKKyAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3lu
Y0NoaWxkcmVuKHRydWUpCisgICAgLCBtX2ZpeGVkVG9WaWV3cG9ydChmYWxzZSkKKyAgICAsIG1f
Y2FudmFzTmVlZHNEaXNwbGF5KGZhbHNlKQorICAgICwgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQoMCkKKyAgICAsIG1fY29udGVudHNTY2FsZSgxKQorICAgICwgbV9jYW52YXNQbGF0
Zm9ybUxheWVyKDApCit7CisgICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwor
ICAgIG1faWQgPSBuZXh0TGF5ZXJJRCsrOworICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0
aGlzKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKCkKK3sKKyAgICBsYXllckJ5SURNYXAoKS5yZW1vdmUoaWQoKSk7CisKKyAgICBpZiAo
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRh
Y2hMYXllcih0aGlzKTsKKyAgICB9CisgICAgd2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKQoreworICAgIEdyYXBo
aWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRy
ZW4pCit7CisgICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVu
KTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW5baV0p
OworICAgICAgICBjaGlsZC0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICAgICAgY2hpbGQtPmRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKKyAgICB9CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsK
KyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAg
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7
CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQor
eworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOworICAg
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsKKyAgICB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAg
ICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2li
bGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5n
KTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPnNldENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7Cisg
ICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRl
KCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5
ZXIqIHNpYmxpbmcpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwg
c2libGluZyk7CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGll
bnQpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdy
YXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpy
ZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICBpZiAoIW9rKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihvbGRDaGlsZCktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCk7CisgICAgdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1v
dmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJl
bnRMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAg
cGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVt
b3ZlRnJvbVBhcmVudCgpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2ludCgpID09IHApCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIGRp
ZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09
IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6
ZSk7CisgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAg
ICBtYXNrTGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIGlmICh0cmFuc2Zvcm0oKSA9PSB0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7CisgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQorewor
ICAgIGlmIChjaGlsZHJlblRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJldHVybjsKKworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHQpOworICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2
ZXMzRChib29sIGIpCit7CisgICAgaWYgKHByZXNlcnZlczNEKCkgPT0gYikKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYik7CisgICAgZGlkQ2hh
bmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1h
c2tzVG9Cb3VuZHMoYm9vbCBiKQoreworICAgIGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKKyAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7Cisg
ICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldERyYXdzQ29udGVudChib29sIGIpCit7CisgICAgaWYgKGRyYXdzQ29udGVudCgpID09
IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQo
Yik7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQoreworICAgIGlmIChjb250
ZW50c0FyZVZpc2libGUoKSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNWaXNpYmxlKGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9v
bCBiKQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldFN1cHBvcnRzQWxwaGEoIWIpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3Bh
cXVlKGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCit7CisgICAgaWYg
KGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZs
b2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOwor
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChjb250
ZW50c1JlY3QoKSA9PSByKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1JlY3Qocik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQorewor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2ltYWdlOworICAgIHNldENvbnRlbnRzVG9JbWFn
ZSgwKTsKKyAgICBzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgIG1fY2FudmFz
TmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgp
LT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIp
Cit7CisgICAgbV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICBtX2Nh
bnZhc05lZWRzRGlzcGxheSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKK3sKKyAgICBpZiAoZmlsdGVycygpID09IG5ld0Zp
bHRlcnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKKyAg
ICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKK30KKyNlbmRp
ZgorCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqIGltYWdlKQoreworICAgIGlmIChpbWFnZSA9PSBtX2ltYWdlKQorICAgICAgICByZXR1
cm47CisgICAgaW50NjRfdCBuZXdJRCA9IDA7CisgICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KSB7CisgICAgICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMg
aXMgdGhlIHNhbWUgZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNy
ZWF0aW5nIHRoZSBpbWFnZS4KKyAgICAgICAgbmV3SUQgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7CisgICAgICAgIG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9s
YXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7CisgICAgICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKKyAgICAgICAgaWYgKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgJiYgbmV3
SUQgPT0gbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQgYmUgbm8gYmFja2luZyBzdG9yZSBJ
RC4KKyAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAg
ICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIH0KKworICAgIG1fbGF5ZXJJbmZvLmlt
YWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisKKyAgICBpZiAoIWxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0U2l6ZShzaXplKCkpOworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobGF5ZXIpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci0+c2V0
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50KTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXItPnNldE1hc2tUYXJnZXQodGhp
cyk7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7
CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworCit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICBpZiAobGF5ZXIgPT0gcmVwbGljYUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChsYXllcikKKyAgICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5z
ZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQpOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5
ZXIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUo
SW50UmVjdChyZWN0KSk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitXZWJMYXll
cklEIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2lkOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkp
CisgICAgICAgIG1hc2stPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwor
CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5ZXJzKCk7CisKKyAgICBzeW5jQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBv
c2l0aW5nU3RhdGUocmVjdCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVyKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCit7CisgICAgaWYgKCFt
X3Nob3VsZFN5bmNDaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0No
aWxkcmVuID0gZmFsc2U7CisgICAgVmVjdG9yPFdlYkxheWVySUQ+IGNoaWxkSURzOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hp
bGRJRHMuYXBwZW5kKHRvV2ViTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7CisKKyAgICBtX0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJ
RHMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7CisgICAg
bV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNMYXllckZpbHRlcnMobV9pZCwg
ZmlsdGVycygpKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3luY0xheWVyU3RhdGUoKQoreworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKKyAgICBt
X2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKworICAgIG1f
bGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKKyAgICBtX2xheWVySW5mby5i
YWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX2xheWVySW5mby5j
aGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7CisgICAgbV9sYXllckluZm8u
Y29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRl
bnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIG1fbGF5ZXJJbmZvLmRyYXdzQ29udGVudCA9
IGRyYXdzQ29udGVudCgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSA9IGNvbnRl
bnRzQXJlVmlzaWJsZSgpOworICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxheWVySUQobWFz
a0xheWVyKCkpOworICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRz
KCk7CisgICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5m
by5wYXJlbnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOworICAgIG1fbGF5ZXJJbmZvLnBvcyA9
IHBvc2l0aW9uKCk7CisgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgp
OworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGljYUxheWVyKCkp
OworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7CisgICAgbV9sYXllckluZm8udHJhbnNm
b3JtID0gdHJhbnNmb3JtKCk7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQt
PnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQoreworICAgIGlmICghbV9jYW52YXNOZWVkc0Rp
c3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9jYW52YXNQbGF0Zm9ybUxheWVy
KQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB1aW50
MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Y29weVRv
R3JhcGhpY3NTdXJmYWNlKCk7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQt
PnN5bmNDYW52YXMobV9pZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgp
KSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pOworI2VuZGlmCisgICAgbV9jYW52YXNOZWVkc0Rpc3Bs
YXkgPSBmYWxzZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVuc3VyZUlt
YWdlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCisgICAgICAgIG1fbGF5
ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShtX2ltYWdlLmdldCgpKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpCit7CisgICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBtaWdodCBoYXZlIGJlZW4gcmVsZWFz
ZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgorICAgIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7
CisgICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4o
KTsKKyAgICBzeW5jTGF5ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBz
eW5jRmlsdGVycygpOworI2VuZGlmCisgICAgdXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKyAgICBz
eW5jQ2FudmFzKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJh
Y2tpbmdTdG9yZVBhaW50QmVnaW4oKQoreworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290KQoreworICAgIG1fbGF5ZXJJbmZvLmlzUm9v
dExheWVyID0gaXNSb290OworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlW
ZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRp
bGVzSWZOZWVkZWQodHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIG1fY29udGVu
dHNTY2FsZSA9IHNjYWxlOworICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKK30KKworZmxvYXQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50c1NjYWxlKCkKK3sKKyAg
ICByZXR1cm4gc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSA/IG1fY29udGVudHNTY2FsZSA6
IDE7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1Nj
YWxlKCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRz
U2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGlu
ZyB0aGUgY29udGVudCwKKyAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91
cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KKyAgICAvLyBicmllZmx5IHNlZWluZyBmbGlj
a2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCisgICAgLy8gc29t
ZXRoaW5nIHJlcGxhY2VzIHRoZW0uCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFp
bkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUg
cHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCisgICAgbV9wcmV2
aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7CisKKyAgICBjcmVh
dGVCYWNraW5nU3RvcmUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZUJhY2tpbmdTdG9yZSgpCit7CisgICAgbV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIo
bmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0
ZSh0aGlzKSkpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29u
dGVudHNPcGFxdWUoKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxl
KGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVjdCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBh
aW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3RzKQoreworfQorCitib29s
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dl
ZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2luVXBkYXRlTW9kZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+bGF5ZXJU
cmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCk7Cit9CisKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7CisgICAgcmV0dXJuIElu
dFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Cit9CisKK2Jvb2wg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpCit7
CisgICAgcmV0dXJuICFzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Cit9
CisKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVZp
c2libGVSZWN0KCkKK3sKKyAgICBpZiAoIXNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkpCisg
ICAgICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOworCisgICAgLy8g
Tm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KKyAgICBpZiAoIW1fbGF5ZXJU
cmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKKworICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZpc2libGUgcmVjdCAo
c3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAobGF5ZXIgY29vcmRp
bmF0ZXMpLgorICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBzcXVld2VkIGFuZCB0
aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBxdWFkLAorICAgIC8v
IHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlzaWJsZSBhcmVhIChh
bmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0IG11bHRpcGxpZXIp
LgorICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQo
KS5pbnZlcnNlKCkuY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9hdFF1YWQoRmxvYXRS
ZWN0KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT52aXNpYmxlQ29udGVudHNSZWN0
KCkpKSkpOworfQorCitDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFx
dWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKK30KKworUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZVN1
cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IHJldHVybiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBk
YXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50LT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywg
dGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVU
aWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50LT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKGludCB0aWxl
SUQpCit7CisgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbW92ZVRpbGUo
aWQoKSwgdGlsZUlEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0
ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBpZiAoIWRyYXdzQ29udGVudCgpKSB7CisgICAgICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOworICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0
b3JlLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2luVXBkYXRlTW9k
ZSA9IHRydWU7CisgICAgLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAocmUpY3JlYXRlIHRo
ZSBtYWluIHRpbGVkIGJhY2tpbmcgc3RvcmUsIG9uY2Ugd2UKKyAgICAvLyBoYXZlIGEgcmVtb3Rl
IGNsaWVudCBhbmQgd2UgYXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8gdGhlIFVJIHByb2Nl
c3MuCisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIGNyZWF0ZUJhY2tpbmdT
dG9yZSgpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKyAg
ICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOworCisgICAgLy8gVGhlIHByZXZpb3VzIGJhY2tpbmcg
c3RvcmUgaXMga2VwdCBhcm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuCisgICAgLy8g
cmVtb3ZpbmcgdGhlIGV4aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUgbmV3IG9uZXMuIFRo
ZSBmaXJzdCB0aW1lCisgICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwgcGFpbnRlZCB3ZSBy
ZW1vdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUuCisgICAgaWYgKG1fbWFpbkJhY2tpbmdT
dG9yZS0+dmlzaWJsZUFyZWFJc0NvdmVyZWQoKSkKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZS5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VC
YWNraW5nU3RvcmVzKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBt
X3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7CisKKyAgICBpZiAobV9sYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRCkgeworICAgICAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpOworICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKKyAg
ICB9CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4o
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudChXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQoreworICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCA9PSBj
bGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqIHJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkp
CisgICAgICAgIHJlcGxpY2EtPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChjbGll
bnQpOworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPnNldENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRyZW4o
KVtpXSk7CisgICAgICAgIGxheWVyLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQo
Y2xpZW50KTsKKyAgICB9CisKKyAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgcmVzb3VyY2VzIG9u
IHRoZSBVSSBwcm9jZXNzIGhlcmUgaWYgdGhlIHJlbW90ZSBjbGllbnQgaGFzIGNoYW5nZWQgb3Ig
aXMgcmVtb3ZlZC4KKyAgICBpZiAobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpIHsK
KyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKKyAgICB9CisgICAgbV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgPSBjbGllbnQ7CisgICAgaWYgKGNsaWVudCkKKyAgICAg
ICAgY2xpZW50LT5hdHRhY2hMYXllcih0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkanVzdFZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0
b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1l
ZFZpc2libGVSZWN0KCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7Cisg
ICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0oKSk7CisgICAg
bV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKKyAgICBtX2xheWVyVHJh
bnNmb3JtLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOworICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0U2l6ZShzaXplKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZygh
cHJlc2VydmVzM0QoKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9y
bShjaGlsZHJlblRyYW5zZm9ybSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFu
c2Zvcm1zKHBhcmVudCgpID8gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5t
X2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRyYW5zZm9ybWF0aW9uTWF0
cml4KCkpOworCisgICAgLy8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJlIHVzZWQgaW4g
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdC4KKyAgICBhZGp1c3RWaXNpYmxlUmVjdCgpOwor
ICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKK30KKworc3RhdGljIFBhc3NPd25QdHI8R3JhcGhp
Y3NMYXllcj4gY3JlYXRlQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihjbGllbnQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6Omlu
aXRGYWN0b3J5KCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9y
eShjcmVhdGVDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOworfQorCitib29sIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCit7
CisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ZTBjNTdkZDUzZTQ0Y2RkODU1ZDAyODE0YjM1YTg1YWVhMzEwNGU0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKQEAgLTAsMCArMSwyMDgg
QEAKKyAgICAvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVm
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcl9oCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFBv
aW50M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllclRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKKyNpbmNsdWRl
ICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gQ29v
cmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGls
ZUlEKSA9IDA7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdlQmFja2lu
Z1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1h
Z2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJT
dGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklE
PiYpID0gMDsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
ID0gMDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2Fu
dmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQz
Ml90IGdyYXBoaWNzU3VyZmFjZVRva2VuKSA9IDA7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRV
cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKK30K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIg
OiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllcgorICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAs
IHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsKKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25z
IGZyb20gR3JhcGhpY3NMYXllci5oLgorICAgIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPiYpOworICAgIHZvaWQgYWRkQ2hpbGQoR3JhcGhpY3NMYXllciopOwor
ICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpOworICAgIHZvaWQg
YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIHZvaWQg
YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopOworICAgIGJvb2wg
cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBy
ZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
Jik7CisgICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKTsKKyAgICB2
b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChi
b29sKTsKKyAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMoYm9vbCk7CisgICAgdm9pZCBzZXREcmF3
c0NvbnRlbnQoYm9vbCk7CisgICAgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCk7CisgICAg
dm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKKyAgICB2b2lkIHNldEJhY2tmYWNlVmlzaWJp
bGl0eShib29sKTsKKyAgICB2b2lkIHNldE9wYWNpdHkoZmxvYXQpOworICAgIHZvaWQgc2V0Q29u
dGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJ
bWFnZSopOworICAgIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKik7Cisg
ICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0UmVwbGlj
YXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7
CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOworICAgIHZvaWQgc2V0Q29udGVudHNTY2Fs
ZShmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3Rh
dGUoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBib29s
IHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisKKyAgICB2b2lk
IHNldFJvb3RMYXllcihib29sKTsKKworICAgIFdlYktpdDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0
OworICAgIHN0YXRpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6
OldlYkxheWVySUQpOworICAgIHZvaWQgZGlkU3luY2hyb25pemUoKTsKKyAgICBJbWFnZSogaW1h
Z2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisKKyAgICBib29sIGZpeGVkVG9WaWV3cG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisgICAgdm9pZCBzZXRGaXhl
ZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsg
fQorCisgICAgR3JhcGhpY3NMYXllciogbWFza1RhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFz
a1RhcmdldDsgfQorICAgIHZvaWQgc2V0TWFza1RhcmdldChHcmFwaGljc0xheWVyKiBsYXllcikg
eyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQorCisgICAgc3RhdGljIHZvaWQgaW5pdEZhY3Rvcnko
KTsKKworICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tp
bmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHBhaW50ZWRBcmVhKTsKKyAgICB2aXJ0dWFsIGJvb2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVz
QWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNv
bnRlbnRzUmVjdCgpOworICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2li
bGVSZWN0KCk7CisgICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworCisgICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRl
SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
VGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxl
SUQpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFi
bGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgdm9pZCBzZXRD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQqKTsKKyAgICB2b2lkIHN5bmNDaGlsZHJlbigpOworICAgIHZvaWQgc3luY0xh
eWVyU3RhdGUoKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmlsdGVy
cygpOworI2VuZGlmCisgICAgdm9pZCBzeW5jQ2FudmFzKCk7CisgICAgdm9pZCBlbnN1cmVJbWFn
ZUJhY2tpbmdTdG9yZSgpOworCisgICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVjdCgpOworICAgIGJv
b2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVDb250
ZW50QnVmZmVycygpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOworICAgIFdlYktpdDo6V2ViTGF5
ZXJJRCBtX2lkOworICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIFJl
ZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBHcmFwaGljc0xheWVyKiBtX21hc2tUYXJnZXQ7Cisg
ICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNm
b3JtIG1fbGF5ZXJUcmFuc2Zvcm07CisgICAgYm9vbCBtX2luVXBkYXRlTW9kZSA6IDE7CisgICAg
Ym9vbCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0OiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5j
TGF5ZXJTdGF0ZTogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVuOiAxOworICAgIGJv
b2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDog
MTsKKyAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsKKworICAgIHZvaWQgbm90aWZ5
Q2hhbmdlKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOworICAgIHZvaWQgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7CisjZW5kaWYKKwor
ICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBib29sIHNlbGZPckFuY2VzdG9y
SGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKKyAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2lu
Z1N0b3JlKCk7CisgICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CisgICAgdm9pZCBjb21w
dXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVy
cygpOworICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBmbG9hdCBl
ZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CisKKyAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCogbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQ7CisgICAgT3du
UHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7CisgICAg
T3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
OworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBQbGF0Zm9ybUxheWVyKiBtX2NhbnZh
c1BsYXRmb3JtTGF5ZXI7Cit9OworCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKKworfQorI2VuZGlmCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE2MjQ0ZTJkOWRkMGZjOTQxNjgx
MmRjNmRmNmY3NDUwMDY2ZmUzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAK
QEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKworI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworQ29vcmRpbmF0ZWRUaWxlOjpDb29yZGluYXRlZFRpbGUo
Q29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJh
Y2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCisgICAgOiBtX2Ns
aWVudChjbGllbnQpCisgICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3Jl
KQorICAgICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0KHRpbGVk
QmFja2luZ1N0b3JlLT50aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQorICAg
ICwgbV9JRCgwKQorICAgICwgbV9kaXJ0eVJlY3QobV9yZWN0KQoreworfQorCitDb29yZGluYXRl
ZFRpbGU6On5Db29yZGluYXRlZFRpbGUoKQoreworICAgIGlmIChtX0lEKQorICAgICAgICBtX2Ns
aWVudC0+cmVtb3ZlVGlsZShtX0lEKTsKK30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzRGly
dHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworfQorCit2
b2lkIENvb3JkaW5hdGVkVGlsZTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Cit7CisgICAgSW50UmVjdCB0aWxlRGlydHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwg
bV9yZWN0KTsKKyAgICBpZiAodGlsZURpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZGlydHlSZWN0LnVuaXRlKHRpbGVEaXJ0eVJlY3QpOworfQorCitWZWN0b3I8
SW50UmVjdD4gQ29vcmRpbmF0ZWRUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKK3sKKyAgICBpZiAo
IWlzRGlydHkoKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworCisgICAgU3Vy
ZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBn
cmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGlydHlSZWN0
LnNpemUoKSwgdXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZz
ZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICByZXR1cm4gVmVjdG9yPElu
dFJlY3Q+KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0Lngo
KSwgLW1fZGlydHlSZWN0LnkoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNp
emUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0
b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQo
KS0+dGlsZWRCYWNraW5nU3RvcmVQYWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIG1fdGlsZWRC
YWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9kaXJ0eVJlY3QpKTsKKworICAgIHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0OworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdC5t
b3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7CisgICAgdXBkYXRlSW5mby5zY2FsZUZhY3Rv
ciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKTsKKyAgICBncmFwaGljc0Nv
bnRleHQucmVsZWFzZSgpOworCisgICAgc3RhdGljIGludCBpZCA9IDA7CisgICAgaWYgKCFtX0lE
KSB7CisgICAgICAgIG1fSUQgPSArK2lkOworICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZSht
X0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOworICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+
dXBkYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOworCisgICAgbV9kaXJ0eVJlY3Qg
PSBJbnRSZWN0KCk7CisgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworfQorCit2b2lkIENv
b3JkaW5hdGVkVGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKK3sKKyAgICAvLyBIYW5kbGVk
IGJ5IHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQuCit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRUaWxl
Ojppc1JlYWR5VG9QYWludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhbV9JRDsKK30KKwordm9p
ZCBDb29yZGluYXRlZFRpbGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1f
cmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAgIG1fZGlydHlS
ZWN0ID0gbV9yZWN0OworfQorCitDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRp
bGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQo
Y2xpZW50KQoreworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5hdGVkVGls
ZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFj
a2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0
ZSkKK3sKKyAgICByZXR1cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVk
QmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxl
QmFja2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRUaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGQxMTM0ZjA0MmU5ZjUyZTAz
ZmNiNDEyYzAzZDMzN2E2NDU3OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgK
QEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29v
cmRpbmF0ZWRUaWxlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRUaWxlX2gKKworI2lmIFVTRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiU2hhcmVhYmxlU3VyZmFjZS5oIgorI2luY2x1
ZGUgIlRpbGUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldl
YkNvcmUvSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbWFnZUJ1ZmZl
cjsKK2NsYXNzIFRpbGVkQmFja2luZ1N0b3JlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50OworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CisK
K2NsYXNzIENvb3JkaW5hdGVkVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50
KiBjbGllbnQsIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwg
Y29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b29yZGluYXRlZFRpbGUoY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUp
KTsgfQorICAgIH5Db29yZGluYXRlZFRpbGUoKTsKKworICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0
OworICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgVmVj
dG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBC
YWNrQnVmZmVyVG9Gcm9udCgpOworICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKKyAg
ICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKTsKKworICAgIGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Nvb3JkaW5hdGU7IH0KKyAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRp
bGVDbGllbnQqLCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUm
KTsKKworICAgIENvb3JkaW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7CisgICAgV2ViQ29yZTo6
VGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7CisgICAgQ29vcmRpbmF0ZSBt
X2Nvb3JkaW5hdGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7CisKKyAgICBpbnQgbV9J
RDsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OworCisgICAgT3duUHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBtX2xvY2FsQnVmZmVyOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRU
aWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFRpbGVDbGllbnQo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxl
KGludCB0aWxlSUQpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNo
YXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOworfTsKKwor
Y2xhc3MgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tp
bmdTdG9yZUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCog
Y2xpZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGll
bnQpKTsgfQorICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsK
KyAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRU
aWxlQmFja2VuZChDb29yZGluYXRlZFRpbGVDbGllbnQqKTsKKyAgICBDb29yZGluYXRlZFRpbGVD
bGllbnQqIG1fY2xpZW50OworfTsKKworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTM1YjdmNWM0MDM2ZDhlYWFkMWEwMzM3MDhjODNhOGIxMWE1ZDgxYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMCwwICsxLDYwOSBA
QAorICAgIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRh
dGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQ
dHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUoV2Vi
UGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUNvb3Jk
aW5hdG9yKHdlYlBhZ2UpKTsKK30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6On5MYXllclRyZWVD
b29yZGluYXRvcigpCit7CisgICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxl
IHdlIGl0ZXJhdGUgaXQuCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOworICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3Jl
Z2lzdGVyZWRMYXllcnMpOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9y
IGl0ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
ICgqaXQpLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCk7Cit9CisKK0xheWVy
VHJlZUNvb3JkaW5hdG9yOjpMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKiB3ZWJQYWdlKQor
ICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlBZnRlclNjaGVkdWxl
ZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAgICAsIG1fd2FpdGlu
Z0ZvclVJUHJvY2Vzcyh0cnVlKQorICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKKyAgICAsIG1f
Y29udGVudHNTY2FsZSgxKQorICAgICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUo
dHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9zaG91bGRTeW5j
Um9vdExheWVyKHRydWUpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0aGlzLCAmTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQodHJ1ZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVyLgorICAg
IG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIHdlYlJvb3RMYXllci0+c2V0Um9vdExheWVyKHRy
dWUpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVl
Q29vcmRpbmF0b3Igcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERy
YXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5z
aXplKCkpOworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJMYXllcklEID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIod2ViUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICB0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCh0aGlzKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBub24tY29tcG9z
aXRlZCBjb250ZW50Iik7CisjZW5kaWYKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxk
KG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7CisKKyAgICBpZiAobV93ZWJQYWdl
LT5oYXNQYWdlT3ZlcmxheSgpKQorICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisK
KyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJs
ZWQpCit7CisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1
c2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQoreworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0
b3AoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hvdWxkTm90aWZ5QWZ0
ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllcikKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxk
cmVuKCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1
ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0
cmVlIGhpZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCit7CisgICAgY2FuY2VsUGVuZGluZ0xh
eWVyRmx1c2goKTsKKworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgIG1fcm9vdExheWVyID0g
bnVsbHB0cjsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQor
ICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
KworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
c2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAg
IHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQoreworICAgIC8vIFRoaXMg
aXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNl
IHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgorICAg
IC8vIEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBz
dGlsbCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcg
ZXhlY3V0ZWQuCisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOworCisgICAgLy8gV2UgbmVlZCB0byBz
Y2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBj
YW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KKyAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0
aCBMYXllclRyZWVIb3N0Q0EuCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNp
emVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAo
bV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIC8vIElmIHRoZSBuZXdTaXplIGV4
cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNE
aXNwbGF5IGlzIG5lZWRlZAorICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgor
ICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXpl
KCk7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwor
CisgICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgeworICAgICAgICBm
bG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQo
KSksIG9sZFNpemUuaGVpZ2h0KCkpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBu
ZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOworICAgIH0KKworICAg
IGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAs
IG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9s
ZFNpemUuaGVpZ2h0KCkpKTsKKworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFn
ZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0
YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit7
CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShm
bG9hdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNo
YW5nZXMoKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgYm9vbCBkaWRT
eW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAg
aWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fcm9vdExheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChtX3Nob3Vs
ZFN5bmNSb290TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmlkKCkpKTsKKyAgICAgICAgbV9z
aG91bGRTeW5jUm9vdExheWVyID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3Nob3VsZFN5
bmNGcmFtZSkKKyAgICAgICAgcmV0dXJuIGRpZFN5bmM7CisKKyAgICBtX3dlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZFJlbmRlckZyYW1lKCkpOwor
ICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CisgICAgbV9zaG91bGRTeW5jRnJhbWUg
PSBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGlu
Zm8pCit7CisgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
RGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCkp
KTsKKyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUoaWQsIGluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xh
eWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+JiBjaGls
ZHJlbikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xh
eWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U3luY0NhbnZhcyhpZCwgY2FudmFzU2l6ZSwgZ3JhcGhpY3NTdXJmYWNlVG9rZW4p
KTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZmlsdGVycykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRDb21wb3Np
dGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmF0dGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5
ZXIpCit7CisgICAgQVNTRVJUKCFtX3JlZ2lzdGVyZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsK
KyAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxheWVyKTsKKworICAgIGxheWVyLT5zZXRDb250
ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92
ZShsYXllcik7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRp
bmdMYXllcihsYXllci0+aWQoKSkpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9t
Vmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVz
ZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJC
YWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9
IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAg
ICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJM
YXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVy
KTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVP
ZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAg
ICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgp
LT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29udGVu
dFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7CisgICAgQVNTRVJU
KHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgp
KQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVyTGF5
ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dh
aXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN5bmNEaXNwbGF5U3Rh
dGUoKTsKKworICAgIGlmICghbV9pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCisgICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRM
YXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5
U3RhdGUoKQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRV9ESVNQTEFZX01PTklUT1IpCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3Vz
bHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZv
cmUgd2UgZmx1c2ggdGhlIGxheWVycy4KKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5G
cmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNU
b0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7CisjZW5kaWYKKworICAgIG1fd2ViUGFnZS0+
bGF5b3V0SWZOZWVkZWQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1
bGVkTGF5ZXJGbHVzaCkgeworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPiht
X3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAg
ICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAgIH0KK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKK3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxh
eWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7CisjaWZuZGVmIE5ERUJV
RworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Ig
cGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKKyNlbmRpZgorCisgICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXpl
KG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3BhZ2VP
dmVybGF5TGF5ZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkZXN0
cm95UGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7
CisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWdl
T3ZlcmxheUxheWVyID0gbnVsbHB0cjsKK30KKworaW50NjRfdCBMYXllclRyZWVDb29yZGluYXRv
cjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAgaW50NjRfdCBrZXkg
PSAwOworCisjaWYgUExBVEZPUk0oUVQpCisgICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworCisgICAgaWYgKCFuYXRpdmVJbWFnZSkK
KyAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOworCisgICAga2V5ID0gbmF0aXZlSW1h
Z2UtPmNhY2hlS2V5KCk7CisjZW5kaWYKKworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6aXRl
cmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5KTsK
KworICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVuZCgp
KSB7CisgICAgICAgICsrKGl0LT5zZWNvbmQpOworICAgICAgICByZXR1cm4ga2V5OworICAgIH0K
KworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICB7CisgICAg
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJp
dG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygpKTsK
KyAgICB9CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgYml0bWFw
LT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGtl
eSwgaGFuZGxlKSk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5hZGQo
a2V5LCAxKTsKKyAgICByZXR1cm4ga2V5OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCit7CisgICAgaWYgKCFrZXkp
CisgICAgICAgIHJldHVybjsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9yIGl0
ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7CisgICAgaWYg
KGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGl0LT5zZWNvbmQtLTsKKworICAgIGlmIChpdC0+c2Vjb25kKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnJl
bW92ZShpdCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Cit9CisKKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCit7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikKK3sKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlm
IChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgeworICAgICAg
ICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3Zlcmxh
eUxheWVyKSB7CisgICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29udGVu
dHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5n
LCBzbyB3ZSBkbyBpdCBoZXJlLgorICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KGNs
aXBSZWN0KTsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250
ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGlu
Z3MoKS0+c2hvd0RlYnVnQm9yZGVycygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hvd1Jl
cGFpbnRDb3VudGVyKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0
ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pKTsK
K30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxh
eWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJl
Y3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3Zl
VGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCit7CisgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOworfQor
CitXZWJDb3JlOjpJbnRSZWN0IExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQoreworICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7CisgICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUg
IT0gbV9jb250ZW50c1NjYWxlOworCisgICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5k
aWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4K
KyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3Rv
cnlWZWN0b3IpOworCisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1Nj
YWxlRGlkQ2hhbmdlKSB7CisgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Cisg
ICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOworCisgICAgICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hh
bmdlKQorICAgICAgICAgICAgICAgICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKKyAg
ICAgICAgICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCpp
dCktPmFkanVzdFZpc2libGVSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKKyAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQorICAg
ICAgICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOworICAgIGlm
IChjb250ZW50c1JlY3REaWRDaGFuZ2UpCisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0
aW9uVXBkYXRlID0gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3Zv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKyNlbmRpZgorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNl
OworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91
cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKQorICAgICAgICBtX3VwZGF0ZUF0bGFzZXNbaV0uZGlk
U3dhcEJ1ZmZlcnMoKTsKK30KKworYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVl
VGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQg
JiYgIW1fd2FpdGluZ0ZvclVJUHJvY2VzczsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5k
KCk7CisgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+
OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIEFTU0VSVCgh
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5zaXplKCkpOworICAgIG1fdXBkYXRl
QXRsYXNlcy5jbGVhcigpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVCaXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVT
dXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK3sKKyAg
ICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQ7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ldOworICAgICAgICBpZiAo
YXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVy
biBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
aGFuZGxlLCBzaXplLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lv
biA9IDIwMDA7CisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNo
QnVmZmVyRGltZW5zaW9uLCBmbGFncykpOworICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFz
dCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ5NDZkYjAxZTA2YzRlN2I1
M2IxMmI4MWY3ZDQ0MjVhZTZkNjk0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JfaAorI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9oCisKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJMYXllclRyZWVD
b250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgi
CisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBVcGRhdGVJbmZvOworY2xhc3MgV2ViUGFnZTsKKworY2xhc3MgTGF5ZXJUcmVl
Q29vcmRpbmF0b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clRyZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRy
ZWVDb29yZGluYXRvcigpOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVy
VHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNvbnRleHQ7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkTm90
aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9uQ29tcG9z
aXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVhbCB2b2lkIHNpemVE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFVuaW5z
dGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNE
aXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFn
ZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFnZU92ZXJsYXlTaG91
bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxz
ZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlU2NhbGVG
YWN0b3JEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tp
bmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSW1hZ2VC
YWNraW5nU3RvcmUoaW50NjRfdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJM
YXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlE
KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVV
cGRhdGVzQWxsb3dlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29v
cmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQs
IENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXll
clN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4m
KTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZp
bHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2Vu
ZGlmCisgICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExh
eWVycygpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2lu
dCYpOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZXhw
bGljaXQgTGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSopOworCitwcml2YXRlOgorICAgIC8v
IEdyYXBoaWNzTGF5ZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworICAg
IHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdDsKKworICAgIC8vIExheWVyVHJlZUNvb3JkaW5h
dG9yCisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgdm9pZCBkZXN0cm95
UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7
CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgcGVyZm9ybVNj
aGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCk7CisgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2gg
Y29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRo
ZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3Zl
cmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxh
eWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBt
X3JlZ2lzdGVyZWRMYXllcnM7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2VSZWZDb3VudHM7CisgICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3VwZGF0
ZUF0bGFzZXM7CisKKyAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwor
ICAgIGJvb2wgbV9pc1ZhbGlkOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cisg
ICAgYm9vbCBtX2lzU3VzcGVuZGVkOworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29u
dGVudHNSZWN0OworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBib29sIG1fc2hvdWxk
U2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlOworCisgICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVy
VHJlZUNvbnRleHQ7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKKyAgICBib29sIG1fc2hv
dWxkU3luY1Jvb3RMYXllcjsKKyAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6
OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOworICAgIFdlYkNvcmU6OlRpbWVyPExheWVy
VHJlZUNvb3JkaW5hdG9yPiBtX2xheWVyRmx1c2hUaW1lcjsKKyAgICBib29sIG1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkOworfTsKKworfQorCisjZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRp
bmF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YjljMmFjZGY4ZjgzMGNlYmM4
YjE2ZmJhZDM5ZmZlZjc3ZGIwNTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyNyBAQAorIworIyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjCisjICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisjICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyMKKworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbWVzc2FnZXMgLT4gTGF5
ZXJUcmVlQ29vcmRpbmF0b3IgeworICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6
SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQ
b2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKKyAgICBSZW5kZXJOZXh0RnJhbWUoKQorICAgIFB1cmdl
QmFja2luZ1N0b3JlcygpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggNzFhYTYwN2NiNWU4Zjc0OGUyYmZlMTM2Njkx
OGY2OWNjZWE2MWMwZC4uNzU5ZTY3NWFkNjQ4OTg4MmJmMTdiNjAxNTQyNTEyYWM0MDljNTliNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
QEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJTeW5jKCkgPSAwOwogI2VuZGlmCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKikgPSAwOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5jcHAKaW5kZXggNWU2ZDVlYzBhMDdjOGY2NjNkNDlkMzgwYTVjNzBmZDE2YTdk
ODM2YS4uOGVjZDllMjUxMzYxYTNiYTUwODI4NDRmOGIwYzAxM2QyM2IwMDA5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5j
cHAKQEAgLTY4OCw3ICs2ODgsNyBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQogICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKIH0KIAotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
IHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBt
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggMmNlYmJkNWM0Y2Y0MWQyNjk2Yzg5NGYxN2M3
MmI0MzBjNThmNWRiYy4uNTVlM2RmNDg0MDBmNzE4NDU4OWE5OWIxYTk0Zjg3YjdkYjc1MGI0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaApAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRM
YXllckhvc3RpbmdNb2RlKHVpbnQzMl90KSBPVkVSUklERTsKICNlbmRpZgogCi0jaWYgVVNFKFVJ
X1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJlNTEw
MDBhNWUxMjg3YzhkNzJmZjYxOTZhZTkwYzNmMDYxZDg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgotCi0jaW5j
bHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAi
TWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJHcmFwaGljc0xheWVyLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVy
QmFja2luZy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5n
cy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LVBhc3NSZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpj
cmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVy
VHJlZUNvb3JkaW5hdG9yKHdlYlBhZ2UpKTsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6On5M
YXllclRyZWVDb29yZGluYXRvcigpCi17Ci0gICAgLy8gUHJldmVudCBzZXRXZWJHcmFwaGljc0xh
eWVyQ2xpZW50KDApIC0+IGRldGFjaExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhlIHNldCB3aGls
ZSB3ZSBpdGVyYXRlIGl0LgotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+
IHJlZ2lzdGVyZWRMYXllcnM7Ci0gICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJl
ZExheWVycyk7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVyZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0V2ViR3JhcGhpY3NM
YXllckNsaWVudCgwKTsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0g
ICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNW
YWxpZCh0cnVlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCi0gICAgLCBtX2lz
U3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX3Nob3Vs
ZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRnJhbWUo
ZmFsc2UpCi0gICAgLCBtX3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKLSAgICAsIG1fbGF5ZXJG
bHVzaFRpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCi0gICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQotewotICAgIC8v
IENyZWF0ZSBhIHJvb3QgbGF5ZXIuCi0gICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgV2ViR3JhcGhpY3NMYXllciogd2ViUm9vdExheWVyID0gdG9XZWJH
cmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKTsKLSAgICB3ZWJSb290TGF5ZXItPnNldFJv
b3RMYXllcih0cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUo
IkxheWVyVHJlZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9vdExh
eWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1f
d2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJlZUNvbnRleHQud2ViTGF5ZXJJRCA9IHRv
V2ViR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOwotCi0gICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwotICAgIHRvV2Vi
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGll
bnQodGhpcyk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXll
ci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igbm9uLWNvbXBvc2l0ZWQgY29udGVudCIp
OwotI2VuZGlmCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2Vi
UGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJs
YXkoKSkKLSAgICAgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotCi0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZChib29sIGxheWVyRmx1c2hpbmdFbmFibGVkKQotewotICAgIGlm
IChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9PSBsYXllckZsdXNoaW5nRW5hYmxlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPSBs
YXllckZsdXNoaW5nRW5hYmxlZDsKLQotICAgIGlmIChtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCkgewotICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKCFtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2xh
eWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFy
dE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCkKLXsKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxl
ZExheWVyRmx1c2goYm9vbCBub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpCi17Ci0gICAg
bV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2ggPSBub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2g7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNPcGFxdWUobV93ZWJQYWdlLT5k
cmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1RyYW5zcGFyZW50QmFja2dyb3Vu
ZCgpKTsKLQotICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5ZXIgdHJlZSBoaWVyYXJjaHku
Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmludmFsaWRhdGUoKQotewotICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0K
LSAgICBBU1NFUlQobV9pc1ZhbGlkKTsKLSAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Ci0gICAg
bV9pc1ZhbGlkID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldE5v
bkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCi17Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7Ci0gICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdl
T3ZlcmxheUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0KLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2Nyb2xsTm9u
Q29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCkKLXsKLSAgICBzZXROb25Db21wb3Np
dGVkQ29udGVudHNOZWVkRGlzcGxheShzY3JvbGxSZWN0KTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Zm9yY2VSZXBhaW50KCkKLXsKLSAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBm
b3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdh
aXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2VseS4KLSAgICAvLyBJbnN0ZWFkIHdl
IGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBo
YXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgotICAg
IHN5bmNEaXNwbGF5U3RhdGUoKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhl
ciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIg
ZXhwZWN0ZWQgZmx1c2guCi0gICAgLy8gVGhpcyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9z
dENBLgotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCi17Ci0gICAgaWYgKG1fcm9vdExheWVyLT5z
aXplKCkgPT0gbmV3U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVh
cyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVk
ZWQKLSAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNpemUg
b2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChuZXdT
aXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0ID0g
c3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgp
IC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6ZS5o
ZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdo
dCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgp
KSk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkKLXsK
LSAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5
KCkKLXsKLSAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU5l
ZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVCht
X3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUpCi17
Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVy
LT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotYm9v
bCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJ
bmNsdWRpbmdTdWJmcmFtZXMoKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c3luY0NvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jUm9vdExheWVy
KSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9XZWJHcmFwaGljc0xheWVyKG1fcm9v
dExheWVyLmdldCgpKS0+aWQoKSkpOwotICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2hvdWxkU3luY0ZyYW1lKQotICAgICAgICByZXR1
cm4gZGlkU3luYzsKLQotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoKSk7Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9j
ZXNzID0gdHJ1ZTsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKFdl
YkxheWVySUQgaWQsIGNvbnN0IFdlYkxheWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91
bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklE
IGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRy
ZW4pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhXZWJMYXll
cklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZh
Y2VUb2tlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlk
LCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOwotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyhX
ZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBm
aWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6YXR0YWNo
TGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgQVNTRVJUKCFtX3JlZ2lzdGVy
ZWRMYXllcnMuY29udGFpbnMobGF5ZXIpKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMuYWRkKGxh
eWVyKTsKLQotICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7Ci0g
ICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmRldGFjaExheWVyKFdlYkdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIG1fcmVn
aXN0ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobGF5ZXItPmlkKCkpKTsKLX0KLQotc3RhdGljIHZv
aWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5
ZXIpCi17Ci0gICAgLy8gVGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25z
IGluIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9u
LgotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5n
KCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0
eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigp
LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdD
b250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsK
LSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5k
ZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxh
eWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsK
LSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKLXsKLSAgICBpZiAo
IW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCktPmhhc0ZpeGVkT2JqZWN0cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBS
ZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5tYWluRnJhbWUoKS0+Y29u
dGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxheWVyKCk7Ci0gICAgQVNT
RVJUKHJvb3RSZW5kZXJMYXllcik7Ci0gICAgaWYgKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyb290UmVuZGVy
TGF5ZXItPmZpcnN0Q2hpbGQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKLXsKLSAgICBpZiAobV9pc1N1c3BlbmRlZCB8fCBt
X3dhaXRpbmdGb3JVSVByb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN5bmNEaXNwbGF5
U3RhdGUoKTsKLQotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAgIGRpZFBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNw
bGF5U3RhdGUoKQotewotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZp
b3VzbHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBi
ZWZvcmUgd2UgZmx1c2ggdGhlIGxheWVycy4KLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1h
aW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29u
ZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7Ci0jZW5kaWYKLQotICAgIG1fd2ViUGFn
ZS0+bGF5b3V0SWZOZWVkZWQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlk
UGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaCkgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwq
PihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwot
ICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0K
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGlt
ZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+KikKLXsKLSAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJG
bHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCkKLXsKLSAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7Ci0KLSAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3Bh
Z2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9w
YWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKLX0KLQotaW50NjRfdCBMYXllclRyZWVDb29yZGlu
YXRvcjo6YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShJbWFnZSogaW1hZ2UpCi17Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAgaW50NjRfdCBr
ZXkgPSAwOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgUUltYWdlKiBuYXRpdmVJbWFnZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgaWYgKCFuYXRpdmVJbWFn
ZSkKLSAgICAgICAgcmV0dXJuIEludmFsaWRXZWJMYXllcklEOwotCi0gICAga2V5ID0gbmF0aXZl
SW1hZ2UtPmNhY2hlS2V5KCk7Ci0jZW5kaWYKLQotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5
KTsKLQotICAgIGlmIChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmVu
ZCgpKSB7Ci0gICAgICAgICsrKGl0LT5zZWNvbmQpOwotICAgICAgICByZXR1cm4ga2V5OwotICAg
IH0KLQotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFz
QWxwaGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKLSAgICB7Ci0g
ICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2ludDo6emVybygp
KTsKLSAgICB9Ci0KLSAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Ci0gICAgYml0
bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdl
KGtleSwgaGFuZGxlKSk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5h
ZGQoa2V5LCAxKTsKLSAgICByZXR1cm4ga2V5OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCBrZXkpCi17Ci0gICAgaWYgKCFr
ZXkpCi0gICAgICAgIHJldHVybjsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD46Oml0ZXJhdG9y
IGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5maW5kKGtleSk7Ci0gICAg
aWYgKGl0ID09IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuZW5kKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGl0LT5zZWNvbmQtLTsKLQotICAgIGlmIChpdC0+c2Vjb25kKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRz
LnJlbW92ZShpdCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpEZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uoa2V5KSk7Ci19Ci0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCi17Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cGFpbnRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KQotewotICAg
IGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcikgewotICAg
ICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9wYWdlT3Zl
cmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJhbnNwYXJlbnQgY29u
dGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2YgdGhlaXIgcmVuZGVy
aW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0
KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJsYXkoZ3JhcGhpY3ND
b250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLWJvb2wgTGF5
ZXJUcmVlQ29vcmRpbmF0b3I6OnNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0
dGluZ3MoKS0+c2hvd0RlYnVnQm9yZGVycygpOwotfQotCi1ib29sIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS0+c2hv
d1JlcGFpbnRDb3VudGVyKCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNy
ZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8p
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fc2hvdWxkU3lu
Y0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdl
dFJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVt
b3ZlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCkpOwot
fQotCi1XZWJDb3JlOjpJbnRSZWN0IExheWVyVHJlZUNvb3JkaW5hdG9yOjp2aXNpYmxlQ29udGVu
dHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQotewotICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zp
c2libGVDb250ZW50c1JlY3Q7Ci0gICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2Nh
bGUgIT0gbV9jb250ZW50c1NjYWxlOwotCi0gICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3Ig
aW5kaWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3Rl
ZC4KLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdl
dCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKTsKLQotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURp
ZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAgICAg
ICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLQotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6Oldl
YkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgp
OwotICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVy
YXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hhbmdlKQotICAgICAgICAgICAgICAg
ICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKLSAgICAgICAgICAgIGlmIChjb250ZW50
c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCppdCktPmFkanVzdFZpc2libGVSZWN0
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBp
ZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQotICAgICAgICBtX3dlYlBhZ2UtPnNldEZp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJlY3QpOwotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFu
Z2UpCi0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKLX0K
LQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6c2NoZWR1bGVBbmltYXRpb24oKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQot
I2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCi17
Ci0gICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOwotfQotCi1i
b29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9j
ZXNzOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMo
KQotewotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBl
bmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6
OldlYkdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVz
KCk7Ci0KLSAgICBBU1NFUlQoIW1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMuc2l6
ZSgpKTsKLSAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpiZWdpbkNvbnRlbnRV
cGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpGbGFn
cyBmbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBv
aW50JiBvZmZzZXQpCi17Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzJiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNl
c1tpXTsKLSAgICAgICAgaWYgKGF0bGFzLmZsYWdzKCkgPT0gZmxhZ3MpIHsKLSAgICAgICAgICAg
IC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGVyZSBpcyBubyBhdmFpbGFibGUgYnVmZmVy
IHNwYWNlLgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0ID0gYXRsYXMuYmVnaW5QYWludGlu
Z09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IFNj
cmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAyMDAwOwotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
VXBkYXRlQXRsYXMoU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKTsKLSAgICByZXR1cm4g
bV91cGRhdGVBdGxhc2VzLmxhc3QoKS5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFu
ZGxlLCBzaXplLCBvZmZzZXQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRv
ci9MYXllclRyZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MDZlNDViOTM1MWYxZjU4NTg1NGMwOGI5MjZiNDU5YWE3
MDZhMjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVy
VHJlZUNvb3JkaW5hdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRvcl9oCi0jZGVmaW5lIExh
eWVyVHJlZUNvb3JkaW5hdG9yX2gKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKLSNp
bmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJV
cGRhdGVBdGxhcy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBVcGRhdGVJbmZvOwotY2xhc3MgV2ViUGFnZTsK
LQotY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3IgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgV2ViR3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7Ci0gICAgdmlydHVh
bCB+TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKTsKLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250
ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9s
bE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwg
dm9pZCBzaXplRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGRpZEluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zl
cmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCk7Ci0gICAgdmlydHVhbCBib29sIHBhZ2VP
dmVybGF5U2hvdWxkQXBwbHlGYWRlV2hlblBhaW50aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9
IHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVu
ZGVkID0gZmFsc2U7IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRl
dmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCkgeyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0
SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVs
ZWFzZUltYWdlQmFja2luZ1N0b3JlKGludDY0X3QpOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwg
aW50IHRpbGVJRCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50
c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXll
clRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2NhbGUsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxh
eWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdl
YkxheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkxheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6
V2ViR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3Jl
OjpXZWJHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygp
OwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVCaXRtYXA6
OkZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQb2ludCYpOwot
I2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFu
aW1hdGlvbigpIE9WRVJSSURFOwotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBM
YXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKik7Ci0KLXByaXZhdGU6Ci0gICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7Ci0gICAgdmlydHVhbCB2
b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWlu
dGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCk7Ci0gICAgdmlydHVh
bCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopIGNvbnN0OwotCi0gICAgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3IKLSAg
ICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICB2b2lkIGRlc3Ryb3lQYWdlT3Zl
cmxheUxheWVyKCk7Ci0gICAgYm9vbCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLSAgICB2
b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBwZXJmb3JtU2NoZWR1bGVk
TGF5ZXJGbHVzaCgpOwotICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsK
LSAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLQotICAgIC8vIFRoZSBsYXllciB3aGljaCBjb250YWlu
cyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwotCi0gICAgLy8gVGhlIHBhZ2Ug
b3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8gcGFnZSBvdmVybGF5Lgot
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VPdmVybGF5TGF5ZXI7Ci0K
LSAgICBIYXNoU2V0PFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXll
cnM7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBpbnQ+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHM7Ci0gICAgVmVjdG9yPFVwZGF0ZUF0bGFzPiBtX3VwZGF0ZUF0bGFzZXM7Ci0KLSAg
ICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotICAgIGJvb2wgbV9pc1Zh
bGlkOwotCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3Vz
cGVuZGVkOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAg
IGZsb2F0IG1fY29udGVudHNTY2FsZTsKLSAgICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0
aW9uVXBkYXRlOwotCi0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0g
ICAgYm9vbCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAgICBib29sIG1fc2hvdWxkU3luY1Jvb3RMYXll
cjsKLSAgICB2b2lkIGxheWVyRmx1c2hUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJl
ZUNvb3JkaW5hdG9yPiopOwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiBtX2xheWVyRmx1c2hUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFi
bGVkOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5h
dG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9y
Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmY2Zjk2YWRiNmE1
MWZiNTNhMjdhNTE2ZWMxZmUwZTVkMzhmMjBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgorKysgL2Rl
di9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMKLSMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIwotIyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0j
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0K
LQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotbWVzc2FnZXMgLT4gTGF5ZXJUcmVlQ29v
cmRpbmF0b3IgewotICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6SW50UmVjdCB2
aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFq
ZWN0b3J5VmVjdG9yeSkKLSAgICBSZW5kZXJOZXh0RnJhbWUoKQotICAgIFB1cmdlQmFja2luZ1N0
b3JlcygpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFw
aGljc0xheWVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxNjk3ZmUyNTIw
NDQyZTdhZGJhOWUwZGIyMzQ4ZjhiN2ViYjFmMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3NTggKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1
ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgotI2luY2x1ZGUgIldl
YlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDxXZWJMYXll
cklELCBXZWJHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCi17Ci0gICAgc3RhdGljIEhh
c2hNYXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+IGdsb2JhbE1hcDsKLSAgICByZXR1
cm4gZ2xvYmFsTWFwOwotfQotCi1XZWJHcmFwaGljc0xheWVyKiBXZWJHcmFwaGljc0xheWVyOjps
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEIGlkKQotewotICAgIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViR3JhcGhpY3NMYXllcio+JiB0YWJsZSA9IGxheWVyQnlJRE1hcCgpOwotICAgIEhhc2hN
YXA8V2ViTGF5ZXJJRCwgV2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHRhYmxlLmZp
bmQoaWQpOwotICAgIGlmIChpdCA9PSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXN0YXRpYyBXZWJMYXllcklEIHRvV2ViTGF5ZXJJ
RChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpk
aWRDaGFuZ2VMYXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1
ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWly
ZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4o
KQotewotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRl
cnMoKQotewotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0cnVlOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLSNlbmRp
ZgotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkK
LXsKLSAgICBpZiAoIXRyYW5zZm9ybSgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xh
eWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotICAgIGlm
IChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXll
cigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5
ZXI6OldlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDog
R3JhcGhpY3NMYXllcihjbGllbnQpCi0gICAgLCBtX21hc2tUYXJnZXQoMCkKLSAgICAsIG1faW5V
cGRhdGVNb2RlKGZhbHNlKQotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQot
ICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hp
bGRyZW4odHJ1ZSkKLSAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwgbV9jYW52
YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCi0gICAgLCBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkK
LSAgICAsIG1fY29udGVudHNTY2FsZSgxKQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDAp
Ci17Ci0gICAgc3RhdGljIFdlYkxheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1faWQgPSBu
ZXh0TGF5ZXJJRCsrOwotICAgIGxheWVyQnlJRE1hcCgpLmFkZChpZCgpLCB0aGlzKTsKLX0KLQot
V2ViR3JhcGhpY3NMYXllcjo6fldlYkdyYXBoaWNzTGF5ZXIoKQotewotICAgIGxheWVyQnlJRE1h
cCgpLnJlbW92ZShpZCgpKTsKLQotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpIHsK
LSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIHdpbGxCZURlc3Ryb3llZCgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAg
R3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NM
YXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4p
Ci17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBj
aGlsZCA9IHRvV2ViR3JhcGhpY3NMYXllcihjaGlsZHJlbltpXSk7Ci0gICAgICAgIGNoaWxkLT5z
ZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAg
ICAgIGNoaWxkLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgfQotICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQobGF5ZXIpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIp
LT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0g
ICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsK
LSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICB0
b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KG1fd2Vi
R3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQg
V2ViR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3Jh
cGhpY3NMYXllciogc2libGluZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93
KGxheWVyLCBzaWJsaW5nKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRXZWJH
cmFwaGljc0xheWVyQ2xpZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgdG9XZWJH
cmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIGRpZENoYW5n
ZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdy
YXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKLXsKLSAgICBi
b29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7
Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxk
cmVuKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPnNldFdlYkdyYXBoaWNz
TGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNz
TGF5ZXIobmV3Q2hpbGQpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAg
aWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9XZWJHcmFwaGljc0xheWVyKHBh
cmVudCgpKSkKLSAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAg
R3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHApCi17Ci0gICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hhbmdlR2Vv
bWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7Ci0g
ICAgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNr
TGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21l
dHJ5KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVuVHJhbnNm
b3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYgKHByZXNl
cnZlczNEKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
UHJlc2VydmVzM0QoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAgICBpZiAobWFza3NU
b0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKLXsKLSAgICBpZiAoZHJhd3ND
b250ZW50KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldERy
YXdzQ29udGVudChiKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYm9vbCBiKQotewotICAgIGlmIChj
b250ZW50c0FyZVZpc2libGUoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNWaXNpYmxlKGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikK
LXsKLSAgICBpZiAoY29udGVudHNPcGFxdWUoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRT
dXBwb3J0c0FscGhhKCFiKTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShi
KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFja2ZhY2VWaXNp
YmlsaXR5KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
QmFja2ZhY2VWaXNpYmlsaXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
aWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwotICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c05lZWRzRGlzcGxheSgpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7Ci0g
ICAgc2V0Q29udGVudHNUb0ltYWdlKDApOwotICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5n
ZXQoKSk7Ci0gICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXll
cjsKLSAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMpOwotfQotCi0jaWYgRU5B
QkxFKENTU19GSUxURVJTKQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCi17Ci0gICAgaWYgKGZpbHRlcnMoKSA9PSBu
ZXdGaWx0ZXJzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkaWRDaGFuZ2VGaWx0ZXJzKCk7
Ci0gICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Ci19Ci0j
ZW5kaWYKLQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFn
ZSogaW1hZ2UpCi17Ci0gICAgaWYgKGltYWdlID09IG1faW1hZ2UpCi0gICAgICAgIHJldHVybjsK
LSAgICBpbnQ2NF90IG5ld0lEID0gMDsKLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
KSB7Ci0gICAgICAgIC8vIFdlIGFkb3B0IGZpcnN0LCBpbiBjYXNlIHRoaXMgaXMgdGhlIHNhbWUg
ZnJhbWUgLSB0aGF0IHdheSB3ZSBhdm9pZCBkZXN0cm95aW5nIGFuZCByZWNyZWF0aW5nIHRoZSBp
bWFnZS4KLSAgICAgICAgbmV3SUQgPSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoaW1hZ2UpOwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQt
PnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlE
KTsKLSAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgICAgICBpZiAobV9sYXllcklu
Zm8uaW1hZ2VCYWNraW5nU3RvcmVJRCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IElmIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCBpcyBub3Qgc2V0IHlldCB0aGVyZSBzaG91bGQg
YmUgbm8gYmFja2luZyBzdG9yZSBJRC4KLSAgICAgICAgQVNTRVJUKCFtX2xheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEKTsKLSAgICAgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIH0K
LQotICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSBuZXdJRDsKLSAgICBtX2lt
YWdlID0gaW1hZ2U7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdl
KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IG1hc2tMYXllcigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOwotCi0gICAgaWYg
KCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsK
LSAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJHcmFwaGljc0xheWVyID0gdG9XZWJHcmFwaGljc0xh
eWVyKGxheWVyKTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xp
ZW50KG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCk7Ci0gICAgd2ViR3JhcGhpY3NMYXllci0+c2V0
TWFza1RhcmdldCh0aGlzKTsKLSAgICB3ZWJHcmFwaGljc0xheWVyLT5kaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotCi19Ci0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0g
ICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobGF5ZXIpCi0gICAgICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLQotICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsK
LSAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRT
aXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3Rv
cmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OwotfQotCi1XZWJMYXllcklEIFdlYkdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9pZDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKFdlYkdyYXBoaWNzTGF5ZXIq
IG1hc2sgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQotICAgICAgICBtYXNrLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChXZWJHcmFw
aGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkK
LSAgICAgICAgcmVwbGljYS0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
Ci0KLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNGaXhlZExheWVycygpOwotCi0g
ICAgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVu
KClbaV0tPnN5bmNDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwotfQotCi1XZWJHcmFwaGljc0xheWVy
KiB0b1dlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYkdyYXBoaWNzTGF5ZXIqPihsYXllcik7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxk
cmVuKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsK
LSAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9X
ZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dC0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygpCi17Ci0gICAg
aWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRT
eW5jRmlsdGVycyA9IGZhbHNlOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xh
eWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJT
dGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxz
ZTsKLSAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsK
LQotICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQoKTsKLSAgICBtX2xh
eWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKLSAgICBtX2xh
eWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7Ci0gICAgbV9s
YXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOwotICAgIG1fbGF5ZXJJ
bmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOwotICAgIG1fbGF5ZXJJbmZvLmRyYXdz
Q29udGVudCA9IGRyYXdzQ29udGVudCgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJs
ZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0b1dlYkxh
eWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNr
c1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKLSAgICBt
X2xheWVySW5mby5wYXJlbnQgPSB0b1dlYkxheWVySUQocGFyZW50KCkpOwotICAgIG1fbGF5ZXJJ
bmZvLnBvcyA9IHBvc2l0aW9uKCk7Ci0gICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVz
ZXJ2ZXMzRCgpOwotICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b1dlYkxheWVySUQocmVwbGlj
YUxheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBzaXplKCk7Ci0gICAgbV9sYXllcklu
Zm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
LT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6c3luY0NhbnZhcygpCi17Ci0gICAgaWYgKCFtX2NhbnZhc05lZWRzRGlzcGxheSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHVpbnQzMl90IGdy
YXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGlj
c1N1cmZhY2UoKTsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnN5bmNDYW52YXMobV9p
ZCwgSW50U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSwgZ3JhcGhpY3NTdXJm
YWNlVG9rZW4pOwotI2VuZGlmCi0gICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSBmYWxzZTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjplbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpCi17Ci0g
ICAgaWYgKCFtX2ltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2xheWVySW5mby5p
bWFnZUJhY2tpbmdTdG9yZUlEKQotICAgICAgICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEID0gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1f
aW1hZ2UuZ2V0KCkpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17Ci0gICAgLy8gVGhlIHJlbW90ZSBpbWFnZSBtaWdo
dCBoYXZlIGJlZW4gcmVsZWFzZWQgYnkgcHVyZ2VCYWNraW5nU3RvcmVzLgotICAgIGVuc3VyZUlt
YWdlQmFja2luZ1N0b3JlKCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsK
LSAgICBzeW5jQ2hpbGRyZW4oKTsKLSAgICBzeW5jTGF5ZXJTdGF0ZSgpOwotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLSAgICBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdXBkYXRlQ29udGVu
dEJ1ZmZlcnMoKTsKLSAgICBzeW5jQ2FudmFzKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXll
cjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCi17Ci0gICAgbV9sYXllckluZm8uaXNS
b290TGF5ZXIgPSBpc1Jvb3Q7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Io
Y29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBpZiAobV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZO
ZWVkZWQodHJhamVjdG9yeVZlY3Rvcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKLXsKLSAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2Fs
ZTsKLSAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci19Ci0KLWZsb2F0IFdlYkdyYXBoaWNzTGF5
ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQotewotICAgIHJldHVybiBzaG91bGRVc2VUaWxl
ZEJhY2tpbmdTdG9yZSgpID8gbV9jb250ZW50c1NjYWxlIDogMTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBt
X21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1Nj
YWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5l
dyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwKLSAgICAvLyB3ZSBkbyBu
b3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4K
LSAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJl
IGRyb3BwZWQgYmVmb3JlCi0gICAgLy8gc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0gICAgbV9w
cmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAg
ICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9u
LXZpc2libGUgYXJlYXMuCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9u
VmlzaWJsZVRpbGVzKCk7Ci0KLSAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fbWFpbkJhY2tp
bmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBUaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5CYWNr
aW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1fbWFp
bkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhaW50R3JhcGhpY3NMYXllckNv
bnRlbnRzKCpjb250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgdXBkYXRlZFJlY3Rz
KQotewotfQotCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVXBkYXRl
c0FsbG93ZWQoKSBjb25zdAotewotICAgIGlmICghbV9pblVwZGF0ZU1vZGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5sYXllclRy
ZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKLX0KLQotSW50UmVjdCBXZWJHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwg
MCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgV2ViR3JhcGhp
Y3NMYXllcjo6c2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKQotewotICAgIHJldHVybiAhc2Vs
Zk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotfQotCi1JbnRSZWN0IFdlYkdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQotewotICAgIGlmICgh
c2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuIHRpbGVkQmFja2lu
Z1N0b3JlQ29udGVudHNSZWN0KCk7Ci0KLSAgICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMgYXJl
IG5vdCB2aXNpYmxlLgotICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzSW52
ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgLy8gUmV0dXJuIGEg
cHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRv
IHRoZSBsYXllcidzIHBsYW5lIChsYXllciBjb29yZGluYXRlcykuCi0gICAgLy8gVGhlIHJlc3Vs
dGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQgYW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJv
dW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCi0gICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRo
ZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFyZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZp
ZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlwbGllcikuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QobV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFtcGVkQm91bmRz
T2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT52aXNpYmxlQ29udGVudHNSZWN0KCkpKSkpOwotfQotCi1Db2xvciBXZWJHcmFwaGljc0xh
eWVyOjp0aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbnRlbnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7
Ci19Ci0KLVBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBXZWJHcmFwaGljc0xh
eWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgU2hh
cmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQp
Ci17Ci0gICAgcmV0dXJuIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+YmVnaW5Db250ZW50VXBk
YXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyAwIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0
c0FscGhhLCBoYW5kbGUsIG9mZnNldCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQot
ewotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQs
IHVwZGF0ZUluZm8sIHRhcmdldFJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnJl
bW92ZVRpbGUoaW50IHRpbGVJRCkKLXsKLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPnJl
bW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjp1cGRh
dGVDb250ZW50QnVmZmVycygpCi17Ci0gICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkgewotICAgICAg
ICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZS5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9pblVwZGF0ZU1v
ZGUgPSB0cnVlOwotICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0
aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90
ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9j
ZXNzLgotICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5n
U3RvcmUoKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7Ci0g
ICAgbV9pblVwZGF0ZU1vZGUgPSBmYWxzZTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5n
IHN0b3JlIGlzIGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8v
IHJlbW92aW5nIHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBU
aGUgZmlyc3QgdGltZQotICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2Ug
cmVtb3ZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5n
U3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5n
U3RvcmUuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQotewotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlv
dXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAgIGlmIChtX2xheWVySW5mby5pbWFnZUJhY2tp
bmdTdG9yZUlEKSB7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+cmVsZWFzZUlt
YWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAg
ICBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEID0gMDsKLSAgICB9Ci0KLSAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6V2ViR3Jh
cGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewotICAgIGlmIChtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQgPT0gY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV2ViR3JhcGhpY3NM
YXllciogcmVwbGljYSA9IHRvV2ViR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCi0gICAg
ICAgIHJlcGxpY2EtPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAgICBpZiAo
V2ViR3JhcGhpY3NMYXllciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkp
Ci0gICAgICAgIG1hc2stPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoY2xpZW50KTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
V2ViR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIodGhpcy0+Y2hpbGRy
ZW4oKVtpXSk7Ci0gICAgICAgIGxheWVyLT5zZXRXZWJHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVu
dCk7Ci0gICAgfQotCi0gICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIHJlc291cmNlcyBvbiB0aGUg
VUkgcHJvY2VzcyBoZXJlIGlmIHRoZSByZW1vdGUgY2xpZW50IGhhcyBjaGFuZ2VkIG9yIGlzIHJl
bW92ZWQuCi0gICAgaWYgKG1fd2ViR3JhcGhpY3NMYXllckNsaWVudCkgewotICAgICAgICBwdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5kZXRh
Y2hMYXllcih0aGlzKTsKLSAgICB9Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50ID0gY2xp
ZW50OwotICAgIGlmIChjbGllbnQpCi0gICAgICAgIGNsaWVudC0+YXR0YWNoTGF5ZXIodGhpcyk7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QoKQotewotICAg
IGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292
ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNvbXB1
dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0
ID0gZmFsc2U7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybSh0cmFuc2Zv
cm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbigpKTsKLSAg
ICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KCkpOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShzaXplKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0
RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGls
ZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3Jt
LmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8gdG9XZWJHcmFwaGljc0xheWVyKHBhcmVudCgp
KS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpKTsKLQotICAgIC8vIFRoZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2Vk
IGluIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QuCi0gICAgYWRqdXN0VmlzaWJsZVJlY3Qo
KTsKLSAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPEdy
YXBoaWNzTGF5ZXI+IGNyZWF0ZVdlYkdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgV2ViR3JhcGhpY3NMYXllcihjbGll
bnQpKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpCi17Ci0gICAg
R3JhcGhpY3NMYXllcjo6c2V0R3JhcGhpY3NMYXllckZhY3RvcnkoY3JlYXRlV2ViR3JhcGhpY3NM
YXllcik7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9u
QWZmaW5lVHJhbnNmb3JtcygpCi17Ci0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVk
KCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGlj
c0xheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTlkMDY3NTA0MWQwNDYx
YzRjNzU1ZDRhNzc1OTIzODRhYTE2MTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwOCAr
MCwwIEBACi0gICAgLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lm
bmRlZiBXZWJHcmFwaGljc0xheWVyX2gKLSNkZWZpbmUgV2ViR3JhcGhpY3NMYXllcl9oCi0KLSNp
bmNsdWRlICJGbG9hdFBvaW50M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUg
IlRpbGVkQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQu
aCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRl
ICJXZWJMYXllclRyZWVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQot
I2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
V2ViR3JhcGhpY3NMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYkdy
YXBoaWNzTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50IHRpbGVJRCkg
PSAwOwotCi0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dl
ZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9y
ZShXZWJDb3JlOjpJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUltYWdlQmFj
a2luZ1N0b3JlKGludDY0X3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUo
V2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKSA9
IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJG
aWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKSA9IDA7
Ci0jZW5kaWYKLSNpZiBQTEFURk9STShRVCkKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhX
ZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBn
cmFwaGljc1N1cmZhY2VUb2tlbikgPSAwOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGF0dGFj
aExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRldGFjaExheWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRs
ZSYsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBXZWJHcmFwaGljc0xheWVyIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQKLSAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGVDbGllbnQgewotcHVibGljOgotICAgIFdlYkdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllckNsaWVudCopOwotICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzTGF5ZXIoKTsKLQot
ICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIGJvb2wg
c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpOwotICAgIHZvaWQgYWRk
Q2hpbGQoR3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNz
TGF5ZXIqLCBpbnQpOwotICAgIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NMYXllciopOwotICAgIHZvaWQgYWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NMYXllciopOwotICAgIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0xheWVyKik7Ci0gICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgdm9pZCBzZXRQ
b3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmKTsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0g
ICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2
b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0g
ICAgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKLSAgICB2b2lkIHNldE1hc2tzVG9Cb3VuZHMo
Ym9vbCk7Ci0gICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250
ZW50c1Zpc2libGUoYm9vbCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c09wYXF1ZShib29sKTsKLSAg
ICB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKTsKLSAgICB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpOwotICAgIHZvaWQgc2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0Nh
bnZhcyhQbGF0Zm9ybUxheWVyKik7Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwotICAgIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpOwot
ICAgIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCk7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29u
dGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktp
dDo6V2ViTGF5ZXJJRCBpZCgpIGNvbnN0OwotICAgIHN0YXRpYyBXZWJHcmFwaGljc0xheWVyKiBs
YXllckJ5SUQoV2ViS2l0OjpXZWJMYXllcklEKTsKLSAgICB2b2lkIGRpZFN5bmNocm9uaXplKCk7
Ci0gICAgSW1hZ2UqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotCi0gICAgYm9v
bCBmaXhlZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQot
ICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3
cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEdyYXBoaWNzTGF5ZXIqIG1hc2tUYXJnZXQoKSBjb25z
dCB7IHJldHVybiBtX21hc2tUYXJnZXQ7IH0KLSAgICB2b2lkIHNldE1hc2tUYXJnZXQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpIHsgbV9tYXNrVGFyZ2V0ID0gbGF5ZXI7IH0KLQotICAgIHN0YXRpYyB2
b2lkIGluaXRGYWN0b3J5KCk7Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3Qg
VmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSk7Ci0gICAgdmlydHVhbCBib29sIHRpbGVkQmFj
a2luZ1N0b3JlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGls
ZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRC
YWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5n
U3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFdlYktpdDo6U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6
SW50UG9pbnQmKTsKLQotICAgIHZvaWQgc2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6
OldlYkdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2b2lkIHN5bmNDaGlsZHJlbigpOwotICAg
IHZvaWQgc3luY0xheWVyU3RhdGUoKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCBzeW5jRmlsdGVycygpOwotI2VuZGlmCi0gICAgdm9pZCBzeW5jQ2FudmFzKCk7Ci0gICAgdm9p
ZCBlbnN1cmVJbWFnZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgdm9pZCBhZGp1c3RWaXNpYmxlUmVj
dCgpOwotICAgIGJvb2wgaXNSZWFkeUZvclRpbGVCdWZmZXJTd2FwKCkgY29uc3Q7Ci0gICAgdm9p
ZCB1cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwotICAgIFdl
YktpdDo6V2ViTGF5ZXJJRCBtX2lkOwotICAgIFdlYktpdDo6V2ViTGF5ZXJJbmZvIG1fbGF5ZXJJ
bmZvOwotICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKLSAgICBHcmFwaGljc0xheWVyKiBtX21h
c2tUYXJnZXQ7Ci0gICAgRmxvYXRSZWN0IG1fbmVlZHNEaXNwbGF5UmVjdDsKLSAgICBHcmFwaGlj
c0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07Ci0gICAgYm9vbCBtX2luVXBkYXRlTW9k
ZSA6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0OiAxOwotICAgIGJvb2wg
bV9zaG91bGRTeW5jTGF5ZXJTdGF0ZTogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0NoaWxkcmVu
OiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jRmlsdGVyczogMTsKLSAgICBib29sIG1fZml4ZWRU
b1ZpZXdwb3J0IDogMTsKLSAgICBib29sIG1fY2FudmFzTmVlZHNEaXNwbGF5IDogMTsKLQotICAg
IHZvaWQgbm90aWZ5Q2hhbmdlKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotICAg
IHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2hpbGRyZW4o
KTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBkaWRDaGFuZ2VGaWx0ZXJzKCk7
Ci0jZW5kaWYKLQotICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICBib29sIHNl
bGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLSAgICBib29sIHNob3VsZFVz
ZVRpbGVkQmFja2luZ1N0b3JlKCk7Ci0gICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7Ci0g
ICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOwotICAgIHZvaWQgc3luY0xh
eWVyUGFyYW1ldGVycygpOwotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsK
LSAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7Ci0KLSAgICBXZWJLaXQ6OldlYkdy
YXBoaWNzTGF5ZXJDbGllbnQqIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudDsKLSAgICBPd25QdHI8
V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdTdG9yZTsKLSAgICBPd25Q
dHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNCYWNraW5nU3RvcmU7Ci0g
ICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxh
dGZvcm1MYXllcjsKLX07Ci0KLVdlYkdyYXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKik7Ci0KLX0KLSNlbmRpZgotCi0jZW5kaWYgLy8gV2ViR3JhcGhpY3NMYXll
cl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhv
c3QuaAppbmRleCAxMzcyZjJhMjk2NDhiM2YxMDEwZWMxMzdiMjQ0OTZhZThmNmQ2MTc2Li45YzJl
NzQ0ZjRkZmQzMWIxOTcwOGQxMmViMTRmMzU5OTc1YTJiYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKQEAgLTg1LDcgKzg1LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZVJlbmRlcmluZygpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBP
U0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQgc2Nh
bGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZUNvbnRlbnRzUmVjdEZvckxheWVyKGludCBsYXllcklELCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIHsgfQpAQCAt
MTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzRGV2
aWNlQWRhcHRlciogZ3JhcGhpY3NEZXZpY2VBZGFwdGVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
I2VuZGlmCiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwog
I2VuZGlmCiAKQEAgLTExNCw3ICsxMTQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBXZWJQYWdlKiBt
X3dlYlBhZ2U7CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCiAgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVByb2Nlc3M7CiAjZW5kaWYK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyMTI1NjAwYjE0NzEyODUxZTkzNDliY2RkNTg1OGI2N2NiZTA2YzFjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUu
aCIKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBk
YXRlSW5mby5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlOjpUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoVGlsZWRCYWNraW5n
U3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJh
Y2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCi0gICAgOiBtX2Ns
aWVudChjbGllbnQpCi0gICAgLCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3Jl
KQotICAgICwgbV9jb29yZGluYXRlKHRpbGVDb29yZGluYXRlKQotICAgICwgbV9yZWN0KHRpbGVk
QmFja2luZ1N0b3JlLT50aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQotICAg
ICwgbV9JRCgwKQotICAgICwgbV9kaXJ0eVJlY3QobV9yZWN0KQotewotfQotCi1UaWxlZEJhY2tp
bmdTdG9yZVJlbW90ZVRpbGU6On5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKQotewotICAg
IGlmIChtX0lEKQotICAgICAgICBtX2NsaWVudC0+cmVtb3ZlVGlsZShtX0lEKTsKLX0KLQotYm9v
bCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzRGlydHkoKSBjb25zdAotewotICAgIHJl
dHVybiAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAg
SW50UmVjdCB0aWxlRGlydHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsK
LSAgICBpZiAodGlsZURpcnR5UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fZGlydHlSZWN0LnVuaXRlKHRpbGVEaXJ0eVJlY3QpOwotfQotCi1WZWN0b3I8SW50UmVjdD4g
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKCkKLXsKLSAgICBp
ZiAoIWlzRGlydHkoKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwotCi0gICAg
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbzsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVudC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGlydHlS
ZWN0LnNpemUoKSwgdXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLCB1cGRhdGVJbmZvLnN1cmZhY2VP
ZmZzZXQpOwotICAgIGlmICghZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICByZXR1cm4gVmVjdG9y
PEludFJlY3Q+KCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0
LngoKSwgLW1fZGlydHlSZWN0LnkoKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zY2FsZShGbG9h
dFNpemUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpLCBtX3RpbGVkQmFja2lu
Z1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKLSAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5jbGll
bnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludChncmFwaGljc0NvbnRleHQuZ2V0KCksIG1fdGls
ZWRCYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9kaXJ0eVJlY3QpKTsKLQotICAgIHVwZGF0
ZUluZm8udXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0OwotICAgIHVwZGF0ZUluZm8udXBkYXRlUmVj
dC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7Ci0gICAgdXBkYXRlSW5mby5zY2FsZUZh
Y3RvciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKTsKLSAgICBncmFwaGlj
c0NvbnRleHQucmVsZWFzZSgpOwotCi0gICAgc3RhdGljIGludCBpZCA9IDA7Ci0gICAgaWYgKCFt
X0lEKSB7Ci0gICAgICAgIG1fSUQgPSArK2lkOwotICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGls
ZShtX0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NsaWVu
dC0+dXBkYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOwotCi0gICAgbV9kaXJ0eVJl
Y3QgPSBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwotfQotCi12b2lk
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKLXsK
LSAgICAvLyBIYW5kbGVkIGJ5IHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQuCi19Ci0KLWJvb2wg
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjppc1JlYWR5VG9QYWludCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICEhbV9JRDsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZVJl
bW90ZVRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fcmVjdCA9
IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1fZGlydHlSZWN0ID0g
bV9yZWN0OwotfQotCi1UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNs
aWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi1QYXNzUmVmUHRy
PFdlYkNvcmU6OlRpbGU+IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0
ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25z
dCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLXsKLSAgICByZXR1
cm4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFj
a2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVt
b3RlVGlsZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2lu
Z1N0b3JlUmVtb3RlVGlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWUxMWU5
YmI3N2FkMTQ0NDc5YTRhYTJhYjgyZjRjOGFhOTIwOWYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZV9oCi0jZGVmaW5lIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZV9oCi0K
LSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZh
Y2UuaCIKLSNpbmNsdWRlICJUaWxlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJXZWJDb3JlL0ludFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xh
c3MgSW1hZ2VCdWZmZXI7Ci1jbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKLX0KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudDsKLWNs
YXNzIFN1cmZhY2VVcGRhdGVJbmZvOwotCi1jbGFzcyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGlsZT4gY3JlYXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xpZW50
LCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IENv
b3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlKGNsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGlu
YXRlKSk7IH0KLSAgICB+VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlKCk7Ci0KLSAgICBib29s
IGlzRGlydHkoKSBjb25zdDsKLSAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiB1cGRhdGVCYWNrQnVmZmVyKCk7
Ci0gICAgdm9pZCBzd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKLSAgICBib29sIGlzUmVhZHlUb1Bh
aW50KCkgY29uc3Q7Ci0gICAgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICBjb25zdCBDb29yZGluYXRlJiBjb29yZGlu
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQotICAgIHZvaWQgcmVzaXpl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLQotcHJpdmF0ZToKLSAgICBUaWxlZEJhY2tpbmdT
dG9yZVJlbW90ZVRpbGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiwgV2ViQ29y
ZTo6VGlsZWRCYWNraW5nU3RvcmUqLCBjb25zdCBDb29yZGluYXRlJik7Ci0KLSAgICBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIG1fY2xpZW50OwotICAgIFdlYkNvcmU6OlRpbGVk
QmFja2luZ1N0b3JlKiBtX3RpbGVkQmFja2luZ1N0b3JlOwotICAgIENvb3JkaW5hdGUgbV9jb29y
ZGluYXRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9yZWN0OwotCi0gICAgaW50IG1fSUQ7Ci0g
ICAgV2ViQ29yZTo6SW50UmVjdCBtX2RpcnR5UmVjdDsKLQotICAgIE93blB0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4gbV9sb2NhbEJ1ZmZlcjsKLX07Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+VGlsZWRCYWNraW5nU3Rv
cmVSZW1vdGVUaWxlQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoaW50
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZShpbnQgdGlsZUlEKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmLCBXZWJDb3JlOjpJbnRQ
b2ludCYpID0gMDsKLX07Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tl
bmQgOiBwdWJsaWMgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc093blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+
IGNyZWF0ZShUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIGNsaWVudCkgeyByZXR1
cm4gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQoY2xpZW50
KSk7IH0KLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IGNyZWF0ZVRpbGUoV2ViQ29yZTo6
VGlsZWRCYWNraW5nU3RvcmUqLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJik7Ci0g
ICAgdm9pZCBwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotCi1wcml2YXRlOgotICAgIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZUJhY2tlbmQoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Kik7
Ci0gICAgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50KiBtX2NsaWVudDsKLX07Ci0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKLQotI2VuZGlmIC8vIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKaW5kZXggMGFj
ZDM0ODZjMjkwMTQyMDdlN2U0YmI4ZDhiMGEwZmU2OGQ5ZDMyNi4uNTg4NjlmMzk5NzY4MDMwMDFi
MDNhZWE5MDVhMTFkNjgyMWIzZGI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKIAotI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmgKaW5kZXggNzQ3NjBhNWI0OWQ0NThm
YTE4ODVjM2Y2MGI4N2U3ZjIzMDU3MzMyOS4uN2QyMjIzNzY5YjEyYjNmMGQ3ZDI5NGJjMjZmNzU4
ZGIzOWNhYzA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1VwZGF0ZUF0bGFzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Vw
ZGF0ZUF0bGFzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZh
Y2UuaCIKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIEludFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0
L1dlYlByb2Nlc3NNYWluUXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQ
cm9jZXNzTWFpblF0LmNwcAppbmRleCBjYjcyY2I5YmU2ZTkyZTJiM2VmOGEzNzE3NmNjZGU4ZGJl
MWU2MWZmLi4yOGIyMDBkMTNmMjIxMWNmZmVkZjUzNDM5YWMwYTVkYTcwZDAwZDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKQEAg
LTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIldlYkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKICNlbmRpZgogI2lmIFVTRShRVEtJ
VCkKICNpbmNsdWRlICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTE4MSw3ICsxODEsNyBAQCBR
X0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KFFHdWlBcHBsaWNhdGlvbiogYXBwKQog
ICAgIH0KICNlbmRpZgogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBXZWJH
cmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aW5pdEZhY3RvcnkoKTsKICNlbmRpZgogCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5pbml0aWFsaXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156490</attachid>
            <date>2012-08-03 17:41:32 -0700</date>
            <delta_ts>2012-08-04 10:52:54 -0700</delta_ts>
            <desc>Renamed file in CMakeLists</desc>
            <filename>bug-93164-20120803174010.patch</filename>
            <type>text/plain</type>
            <size>269952</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAxMTNlYjFjNjQ2MTYwNjdmZDAwZjhj
NTQ2MGVlNTlmMjY4Y2E3M2IuLjg0ZWJhYjM5M2MwMTY5MGEyMzA1YjRlZmU3YzJmNDEyNTM3Yzlm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDgtMDMgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFVJX1NJREVfQ09NUE9TSVRJ
TkcgY29kZSBoYXMgY29uZnVzaW5nIG5hbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MzE2NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbmFtZWQgVUlfU0lERV9DT01QT1NJVElORyB0byBDT09SRElO
QVRFRF9HUkFQSElDUy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEyLTA4LTAz
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTdHJp
bmdJbXBsIGNyZWF0ZWQgZnJvbSBsaXRlcmFsIHNob3VsZCBiZSBCdWZmZXJJbnRlcm5hbApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDkzMWU2OWIwOWE4ZWM1ZjFjNzM5OGY2MmFjNTZkMDdlYjhjOWU4ODkuLjgzN2Ez
NmNiNTNiZTk3ZjgxNDA5OWY2MGQ1ZTIxYjMzYjQ2NzExZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw3NSBAQAorMjAxMi0wOC0wMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFtRdF0gVUlfU0lERV9DT01QT1NJVElORyBjb2RlIGhhcyBjb25m
dXNpbmcgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkzMTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lZCBhbmQgY29uc29saWRhdGVkIGNvZGUgZ3VhcmRlZCB1bmRlciBVSV9TSURFX0NP
TVBPU0lUSU5HLCBub3cgdW5kZXIKKyAgICAgICAgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSBn
dWFyZCBhbmQgQ29vcmRpbmF0ZWRHcmFwaGljcyBmb2xkZXJzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMucHJpOgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNoYXJlZC9XZWJM
YXllclRyZWVJbmZvLmNwcDoKKyAgICAgICAgKiBTaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAo
UVJhd1dlYlZpZXc6OnBhaW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdT
dG9yZS5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lmgu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAu
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5oLgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoK
KyAgICAgICAgKERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJv
eHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmg6CisgICAgICAg
IChEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2Up
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwOgorICAgICAgICAo
V2ViS2l0OjpDb250ZW50c1NHTm9kZTo6Q29udGVudHNTR05vZGUpOgorICAgICAgICAoV2ViS2l0
OjpDb250ZW50c1NHTm9kZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoQ29udGVudHNT
R05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VTR05vZGU6OnNldFJlbmRlcmVyKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoUXRXZWJQYWdlU0dOb2RlKToKKyAgICAgICAgKiBXZWJLaXQyLnByaToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVBbmltYXRpb24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5jcHAuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGls
ZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGUuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
aDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2luZ0FyZWFJbXBs
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAg
ICAoTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0
bGFzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMi0wOC0wMyAgQW5kZXJzIENhcmxzc29uICA8
YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIE5vdGhpbmcgaGFwcGVucyB3aGVuIGNsaWNr
aW5nIG9uIHRoZSB1bmF2YWlsYWJsZSBwbHVnLWluIGJ1dHRvbiBmb3IgYSBibG9ja2VkIHBsdWct
aW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IDUwNzEwYjEzODMwODgxM2YyNDI4MzliYWFhYzU0MzY4YzAzNjdi
MDkuLmI3MzgzYjIyZWIzZjc5ZTllNGMzMjg4YmRiZGZhNTMxYWQ0YzM4MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aApAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAogLyogQ29tcG9zaXRpbmcgb24gdGhlIFVJLXByb2Nl
c3MgaW4gV2ViS2l0MiAqLwogI2lmIFBMQVRGT1JNKFFUKQotI2RlZmluZSBXVEZfVVNFX1VJX1NJ
REVfQ09NUE9TSVRJTkcgMQorI2RlZmluZSBXVEZfVVNFX0NPT1JESU5BVEVEX0dSQVBISUNTIDEK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IGE5NWViYTExOWRkMzQ1MGUwNDExYjgzNGUzZDljZmNjYjk4MTY4MjguLjA0
NGEzNWIyMjJlMjIxMjE4MjBkZTRmZjkyZjEwMGQ4ZmE1NmMwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjEsNyArMjIxLDcgQEAgU0VUKFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vz
cy9GaW5kSW5kaWNhdG9yLmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9HZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UHJveHkuY3BwCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwCisKICAgICBVSVByb2Nlc3MvUmVzcG9uc2l2ZW5lc3NUaW1lci5jcHAKICAgICBVSVBy
b2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5jcHAKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXJQcm94eS5jcHAKQEAgLTI1NCw3ICsyNTQsNyBAQCBTRVQoV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZUNsaWVudC5jcHAKICAgICBVSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3Rv
cmFnZU1hbmFnZXJQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIu
Y3BwCisKICAgICBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9X
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9u
RGF0YS5jcHAKQEAgLTMyMyw2ICszMjMsOSBAQCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwCiAgICAgVUlQcm9jZXNzL0F1
dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisgICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCisgICAgCiAgICAg
VUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAogCiAgICAgVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC00NTQsMTEgKzQ1NywxMCBA
QCBTRVQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFw
dGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAorCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L1BhZ2VPdmVybGF5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250
cm9sbGVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90
ZVRpbGUuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC00NjcsNiArNDY5LDkgQEAgU0VUKFdlYktp
dDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViVW5kb1N0ZXAuY3BwCisKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAogKQogCiBTRVQoV2Vi
S2l0Ml9NRVNTQUdFU19JTl9GSUxFUwpAQCAtNDc3LDcgKzQ4Miw2IEBAIFNFVChXZWJLaXQyX01F
U1NBR0VTX0lOX0ZJTEVTCiAgICAgU2hhcmVkL1BsdWdpbnMvTlBPYmplY3RNZXNzYWdlUmVjZWl2
ZXIubWVzc2FnZXMuaW4KIAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lm1lc3NhZ2Vz
LmluCi0gICAgVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4K
ICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgogICAgIFVJUHJvY2Vzcy9XZWJCYXR0ZXJ5TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAgICAg
VUlQcm9jZXNzL1dlYkNvbnRleHQubWVzc2FnZXMuaW4KQEAgLTQ5NSw2ICs0OTksOSBAQCBTRVQo
V2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hl
TWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAgICAgVUlQcm9jZXNzL1dlYlZpYnJhdGlvblByb3h5
Lm1lc3NhZ2VzLmluCiAKKworICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKyAgICAKICAgICBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4KIAogICAgIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtNTM0LDkg
KzU0MSwxMCBAQCBTRVQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KICkKIAog
U0VUKFdlYlByb2Nlc3NfRVhFQ1VUQUJMRV9OQU1FIFdlYlByb2Nlc3MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVk
U291cmNlcy5wcmkKaW5kZXggNDJmYTY2NTdhMmNhNzgyMTMzNTQ3NTdmOWNmZDg4YzE0OGExMDhk
NC4uMjZjYmIyYjg1NmVlOTUxZGFiMmE3OWM1MzBjOTVhZTc2OTEwMDk5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rl
cml2ZWRTb3VyY2VzLnByaQpAQCAtNTEsOCArNTEsMTAgQEAgVlBBVEggPSBcCiAgICAgV2ViUHJv
Y2Vzcy9SZXNvdXJjZUNhY2hlIFwKICAgICBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0IFwKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzIFwKICAgICBXZWJQcm9jZXNzIFwKICAgICBVSVByb2Nlc3MgXAorICAgIFVJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzIFwKICAg
ICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMgXApAQCAt
OTMsMTAgKzk1LDEwIEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYk5vdGlmaWNhdGlv
bk1hbmFnZXIubWVzc2FnZXMuaW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluIFwKICAgICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwKLSAgICBX
ZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwKLSAgICBXZWJQYWdlL0xheWVyVHJlZUNv
b3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluIFwKLSAgICBXZWJQYWdl
L1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCi0gICAgV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluIFwKKyAgICBEcmF3aW5nQXJlYS5tZXNzYWdlcy5pbiBcCisgICAgTGF5ZXJUcmVlQ29vcmRp
bmF0b3IubWVzc2FnZXMuaW4gXAorICAgIFdlYkluc3BlY3Rvci5tZXNzYWdlcy5pbiBcCisgICAg
V2ViUGFnZS5tZXNzYWdlcy5pbiBcCiAgICAgV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIFwKICAg
ICBXZWJQcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBlN2E2NGYwMzNiYTZm
ZTNlYzBiYmQ3YzkwYzg2MGJmNzA4MzM1NTEyLi44MzY2ZmNjYzdiMTcxOGU2MDhkY2RjZjViNDZk
N2M5YjU5MWQ4MWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTE0MCw4ICsx
NDAsNiBAQCB3ZWJraXQyX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYktp
dDIvRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIv
RXZlbnREaXNwYXRjaGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9FdmVudERpc3BhdGNoZXJNZXNzYWdlcy5oIFwKLQlEZXJpdmVkU291cmNlcy9XZWJLaXQy
L0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIFwKLQlEZXJpdmVk
U291cmNlcy9XZWJLaXQyL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJLaXQyL05QT2JqZWN0TWVzc2FnZVJlY2VpdmVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9OUE9iamVjdE1lc3NhZ2VSZWNlaXZl
ck1lc3NhZ2VzLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luQ29udHJvbGxlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IDliMDQ0OGFlOGE3NmVkYTNmOWZlZmVmYTNkZWNh
MjU3Yzg3MTRlM2YuLjk5NTYzZjRlN2VlMGQzNDZlMGEwMzNiODNkNTM2Y2I2M2FiZmNmZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBA
IC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lU
SU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlIDxXZWJDb3JlL0Fu
aW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludDNELmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgpAQCAtNjUyLDcgKzY1Miw3IEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgS1VS
TCYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogdm9pZCBBcmd1bWVudENvZGVy
PEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZs
b2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Rmxv
YXRQb2ludDNEPjo6ZW5jb2RlKGVuY29kZXIsIGZsb2F0UG9pbnQzRCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggZGIyYjhmNzQxZWMyYTMx
YWNiZGMxMjdjNDE3MWY5Y2IzN2Q0NTlhYy4uYjc2NzhjNTI1NDljYzI1ZGM5YTMwYzcwZTg4MGE4
MTg5ZWJhMzJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaApAQCAtODYsNyArODYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAjZW5kaWYK
IAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKIH0KQEAgLTI0MCw3
ICsyNDAsNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OktVUkw+
IHsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6S1VS
TCYpOwogfTsKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
RmxvYXRQb2ludDNEPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwogICAgIHN0YXRpYyBib29sIGRlY29kZShB
cmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmNwcAppbmRleCBmZmRlYTUyMmIzOWQyNmM0ZjdhNTEx
ODkxZTVkZWNiODcwOGQ0NGNkLi5lMDgzNjQwMDY5ODVkMGJkYTVkMWE2MWU0MzliZDg5MTgxODE4
NGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uY3BwCkBAIC0x
OSw3ICsxOSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJXZWJM
YXllclRyZWVJbmZvLmgiCiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8uaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJMYXllclRyZWVJbmZvLmgKaW5kZXggZDVkNzIzMzkxMWUwZDJkY2IyZGRl
NjEzM2JmNTM2ZDQ1OGE5MmY2NC4uZGY0NDc3OGE4ZDZiYmFkYjgwODAwZTA5ZGM1MTNjZWEzMTJi
MTRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkxheWVyVHJlZUluZm8u
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTGF5ZXJUcmVlSW5mby5oCkBAIC0yMCw3
ICsyMCw3IEBACiAjaWZuZGVmIFdlYkxheWVyVHJlZUluZm9faAogI2RlZmluZSBXZWJMYXllclRy
ZWVJbmZvX2gKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUg
IkFyZ3VtZW50RW5jb2Rlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggZWRlYTljNTkxMTYxNTdlOThhOGQy
N2Q2NTkwMzkyZDNhOGU4N2M2OC4uYjE0YWRkNzQ3MGU3NDdhNDhjODZiYWZjZmUzZmRhMWFhZjQ0
NDcyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yMTUsNiArMjE1LDkgQEAgSEVBREVSUyArPSBcCiAgICAg
VUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rpb25TcGFjZS5oIFwKICAgICBVSVBy
b2Nlc3MvQmFja2luZ1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eS5oIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5oIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmggXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmggXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5Lmgg
XAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIFwKICAgICBVSVByb2Nlc3Mv
RmluZEluZGljYXRvci5oIFwKQEAgLTIyMyw3ICsyMjYsNiBAQCBIRUFERVJTICs9IFwKICAgICBV
SVByb2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmggXAogICAgIFVJUHJv
Y2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVy
L1RocmVhZExhdW5jaGVyLmggXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL1dlYk5vdGlmaWNhdGlvbi5oIFwKQEAgLTI2OCw3ICsyNzAsNiBAQCBIRUFERVJTICs9IFwK
ICAgICBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9X
ZWJJbnNwZWN0b3JQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFu
YWdlclByb3h5LmggXAotICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oIFwKICAg
ICBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJNZWRpYUNh
Y2hlTWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5oIFwK
QEAgLTMwNCw3ICszMDUsNiBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29u
dGV4dE1lbnVQcm94eVF0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJHZW9sb2NhdGlvblByb3Zp
ZGVyUXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuaCBcCi0gICAg
VUlQcm9jZXNzL3RleG1hcC9MYXllckJhY2tpbmdTdG9yZS5oIFwKICAgICBXZWJQcm9jZXNzL0Fw
cGxpY2F0aW9uQ2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9BdXRoZW50aWNhdGlvbi9BdXRoZW50aWNhdGlvbk1hbmFnZXIuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9CYXR0ZXJ5L1dlYkJhdHRlcnlNYW5hZ2VyLmggXApAQCAtMzg1LDggKzM4NSw5IEBAIEhF
QURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVy
VHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggXAotICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmggXAorICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oIFwKKyAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZFRpbGUuaCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5oIFwKQEAgLTU4NSw2ICs1
ODYsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJv
dGVjdGlvblNwYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBcCisgICAgVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgXAorICAg
IFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwIFwKQEAgLTU5Niw3ICs2MDAsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3Mv
TGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQv
UHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFk
TGF1bmNoZXJRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmNwcCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmlj
YXRpb25zL1dlYk5vdGlmaWNhdGlvbi5jcHAgXApAQCAtNjM5LDcgKzY0Miw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVT
dG9yYWdlTWFuYWdlclByb3h5LmNwcCBcCi0gICAgVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRl
cmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYk5h
dmlnYXRpb25EYXRhLmNwcCBcCkBAIC02ODIsNyArNjg0LDYgQEAgU09VUkNFUyArPSBcCiAgICAg
VUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
V2ViUHJlZmVyZW5jZXNRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFz
ZUNsaWVudC5jcHAgXAotICAgIFVJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3Bw
IFwKICAgICBXZWJQcm9jZXNzL0FwcGxpY2F0aW9uQ2FjaGUvV2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9u
TWFuYWdlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvQmF0dGVyeS9XZWJCYXR0ZXJ5TWFuYWdlci5j
cHAgXApAQCAtNzgxLDEyICs3ODIsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRy
ZWVDb29yZGluYXRvci5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29y
ZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBc
CisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3IuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJv
bGxlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0
TWVudS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZS5jcHAKaW5kZXggOTljNWZmYjQwNTI1ODVmNTgzNThlZGVmMDk5YmQ3ZGI4ODA2NDJi
My4uNzkxMWYxNjdjOTc2ZmFhOGJjNTRhYjc0M2ZiMTAyNTU5MTczYTE4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMiwx
MCArMjIsMTAgQEAKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKIAogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5o
IgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFn
ZVNHTm9kZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNs
dWRlICJxcXVpY2t3ZWJwYWdlX3BfcC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgpA
QCAtODIsNyArODIsNyBAQCBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUo
UVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiAgICAgICAgIHJldHVybiBv
bGROb2RlOwogCiAgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSA9IGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSgpOwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CisgICAgTGF5ZXJU
cmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJU
cmVlUmVuZGVyZXIoKTsKIAogICAgIFF0V2ViUGFnZVNHTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0
PFF0V2ViUGFnZVNHTm9kZSo+KG9sZE5vZGUpOwogICAgIGlmICghbm9kZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAppbmRleCAx
MjFmOTBkODg5ZjNkMmYyODZhZjA4YTBiOTBmMWJkNGZiZmVhYTU3Li4wYWVkNWQ5NDg2ODMwMGZh
YWE0ZjUzN2UyOTE0ZTJkZTMyNTI4OTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5j
bHVkZSAiQ3Vyc29yLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAi
TmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zMSw3
ICszMiw2IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkxh
eWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAi
V2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19wX3AuaCIKQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpwYWludChjb25zdCBRTWF0cml4NHg0JiB0cmFu
c2Zvcm0sIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIHBhaQogICAgIGlmICghY29vcmRpbmF0b3JQ
cm94eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
ciogcmVuZGVyZXIgPSBjb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAg
IFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gY29vcmRpbmF0b3JQcm94eS0+
bGF5ZXJUcmVlUmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NGY2ZWJkMmYxNjU4ZTY5OTY1ZTQ3MWJhMzYyNWE5MjI4OWZhYTcyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZh
Y2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
Kwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7CisgICAgaWYgKCFtX3N1cmZhY2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0KG1fdGFyZ2V0UmVjdCk7
CisgICAgdGFyZ2V0UmVjdC5zY2FsZSgxLiAvIG1fc2NhbGUpOworICAgIGJvb2wgc2hvdWxkUmVz
ZXQgPSBmYWxzZTsKKyAgICBpZiAodGFyZ2V0UmVjdCAhPSByZWN0KCkpIHsKKyAgICAgICAgc2V0
UmVjdCh0YXJnZXRSZWN0KTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOworICAgIH0KKyAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IHRoaXMtPnRleHR1cmUoKTsKKyAgICBp
ZiAoIXRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRl
eHR1cmUoKTsKKyAgICAgICAgc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgc2hv
dWxkUmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRSZXNldCkKKyAgICAgICAg
dGV4dHVyZS0+cmVzZXQobV90YXJnZXRSZWN0LnNpemUoKSwgbV9zdXJmYWNlLT5mbGFncygpICYg
U2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhID8gQml0bWFwVGV4dHVyZTo6U3VwcG9ydHNB
bHBoYSA6IDApOworCisgICAgbV9zdXJmYWNlLT5jb3B5VG9UZXh0dXJlKHRleHR1cmUsIG1fc291
cmNlUmVjdCwgbV9zdXJmYWNlT2Zmc2V0KTsKKyAgICBtX3N1cmZhY2UuY2xlYXIoKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxT
aGFyZWFibGVTdXJmYWNlPiBidWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
bV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKKyAgICBtX3RhcmdldFJlY3QgPSB0YXJnZXRSZWN0
OworICAgIG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKKyAgICBtX3N1cmZhY2UgPSBidWZmZXI7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUoaW50IGlkLCBm
bG9hdCBzY2FsZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlKHNjYWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKGludCBpZCkKK3sKKyAgICBtX3RpbGVzVG9SZW1v
dmUuYXBwZW5kKGlkKTsKK30KKworCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRh
dGVUaWxlKGludCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYg
dGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBiYWNrQnVmZmVyLCBjb25z
dCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7CisgICAgQVNTRVJU
KGl0ICE9IG1fdGlsZXMuZW5kKCkpOworICAgIGl0LT5zZWNvbmQuaW5jcmVtZW50UmVwYWludENv
dW50KCk7CisgICAgaXQtPnNlY29uZC5zZXRCYWNrQnVmZmVyKHRhcmdldFJlY3QsIHNvdXJjZVJl
Y3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIEhhc2hNYXA8
aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxpbnQsIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+c2Vj
b25kLnRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4g
dGV4dHVyZTsKKyAgICB9CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigp
OworfQorCitzdGF0aWMgYm9vbCBzaG91bGRTaG93VGlsZURlYnVnVmlzdWFscygpCit7CisjaWYg
UExBVEZPUk0oUVQpCisgICAgcmV0dXJuIChxZ2V0ZW52KCJRVF9XRUJLSVRfU0hPV19DT01QT1NJ
VElOR19ERUJVR19WSVNVQUxTIikgPT0gIjEiKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBC
aXRtYXBUZXh0dXJlKiBtYXNrKQoreworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRp
bGVzVG9QYWludDsKKworICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBh
aW50LCBpbiBjYXNlIHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgorICAgIEhhc2hNYXA8aW50LCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgp
OworICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKKyAgICBmb3IgKEhhc2hNYXA8aW50LCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSYg
dGlsZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghdGlsZS50ZXh0dXJlKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodGlsZS5zY2FsZSgpID09IG1fc2NhbGUpIHsK
KyAgICAgICAgICAgIHRpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOworICAgICAgICAgICAgY292
ZXJlZFJlY3QudW5pdGUodGlsZS5yZWN0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHByZXZpb3VzIHRpbGUgaWYgdGhlIG9w
YWNpdHkgaXMgaGlnaCwgb3RoZXJ3aXNlIGVmZmVjdCBsb29rcyBsaWtlIGEgYnVnLgorICAgICAg
ICAvLyBXZSBzaG93IHRoZSBwcmV2aW91cy1zY2FsZSB0aWxlIGFueXdheSBpZiBpdCBkb2Vzbid0
IGludGVyc2VjdCB3aXRoIGFueSBjdXJyZW50LXNjYWxlIHRpbGUuCisgICAgICAgIGlmIChvcGFj
aXR5IDwgMC45NSAmJiBjb3ZlcmVkUmVjdC5pbnRlcnNlY3RzKHRpbGUucmVjdCgpKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRpbGVzVG9QYWludC5wcmVwZW5kKCZ0aWxlKTsK
KyAgICB9CisKKyAgICAvLyBUT0RPOiBXaGVuIHRoZSBUZXh0dXJlTWFwcGVyIG1ha2VzIGEgZGlz
dGluY3Rpb24gYmV0d2VlbiBzb21lIGVkZ2VzIGV4cG9zZWQgYW5kIG5vIGVkZ2VzCisgICAgLy8g
ZXhwb3NlZCwgdGhlIHZhbHVlIHBhc3NlZCBzaG91bGQgYmUgYW4gYWNjdXJhdGUgcmVmbGVjdGlv
biBvZiB0aGUgdGlsZSBzdWJzZXQgdGhhdCB3ZSBhcmUKKyAgICAvLyBwYXNzaW5nLiBGb3Igbm93
IHdlIGp1c3QgImVzdGltYXRlIiBzaW5jZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSBkb2Vzbid0
IGtlZXAgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAvLyB0aGUgdG90YWwgdGlsZWQgc3VyZmFjZSBy
ZWN0IGF0IHRoZSBtb21lbnQuCisgICAgdW5zaWduZWQgZWRnZXNFeHBvc2VkID0gbV90aWxlcy5z
aXplKCkgPiAxID8gVGV4dHVyZU1hcHBlcjo6Tm9FZGdlcyA6IFRleHR1cmVNYXBwZXI6OkFsbEVk
Z2VzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1BhaW50LnNpemUoKTsgKytp
KSB7CisgICAgICAgIFRleHR1cmVNYXBwZXJUaWxlKiB0aWxlID0gdGlsZXNUb1BhaW50W2ldOwor
ICAgICAgICB0aWxlLT5wYWludCh0ZXh0dXJlTWFwcGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1h
c2ssIGVkZ2VzRXhwb3NlZCk7CisgICAgICAgIHN0YXRpYyBib29sIHNob3VsZERlYnVnID0gc2hv
dWxkU2hvd1RpbGVEZWJ1Z1Zpc3VhbHMoKTsKKyAgICAgICAgaWYgKCFzaG91bGREZWJ1ZykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdCb3JkZXIo
Q29sb3IoMHhGRiwgMCwgMCksIDIsIHRpbGUtPnJlY3QoKSwgdHJhbnNmb3JtKTsKKyAgICAgICAg
dGV4dHVyZU1hcHBlci0+ZHJhd1JlcGFpbnRDb3VudGVyKHN0YXRpY19jYXN0PENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZSo+KHRpbGUpLT5yZXBhaW50Q291bnQoKSwgOCwgdGlsZXNUb1BhaW50
W2ldLT5yZWN0KCkubG9jYXRpb24oKSwgdHJhbnNmb3JtKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVNYXBwZXIq
IHRleHR1cmVNYXBwZXIpCit7CisgICAgVmVjdG9yPGludD46Oml0ZXJhdG9yIHRpbGVzVG9SZW1v
dmVFbmQgPSBtX3RpbGVzVG9SZW1vdmUuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8aW50Pjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gdGlsZXNUb1JlbW92ZUVu
ZDsgKytpdCkKKyAgICAgICAgbV90aWxlcy5yZW1vdmUoKml0KTsKKyAgICBtX3RpbGVzVG9SZW1v
dmUuY2xlYXIoKTsKKworICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGU+OjppdGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFw
PGludCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLnN3YXBC
dWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjM3ZmViYTcwYWM4YmVlY2IyZDAzNjQ5NWZiZGZjNGYzNGZmYjQ1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAorI2Rl
ZmluZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVTdXJmYWNlOworCitjbGFzcyBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUgewor
cHVibGljOgorICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShmbG9hdCBzY2FsZSA9IDEp
CisgICAgICAgIDogVGV4dHVyZU1hcHBlclRpbGUoV2ViQ29yZTo6RmxvYXRSZWN0KCkpCisgICAg
ICAgICwgbV9zY2FsZShzY2FsZSkKKyAgICAgICAgLCBtX3JlcGFpbnRDb3VudCgwKQorICAgIHsK
KyAgICB9CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxl
OyB9CisgICAgaW5saW5lIHZvaWQgaW5jcmVtZW50UmVwYWludENvdW50KCkgeyArK21fcmVwYWlu
dENvdW50OyB9CisgICAgaW5saW5lIGludCByZXBhaW50Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X3JlcGFpbnRDb3VudDsgfQorICAgIHZvaWQgc3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlciopOworICAgIHZvaWQgc2V0QmFja0J1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVm
ZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxT
aGFyZWFibGVTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3NvdXJj
ZVJlY3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtX3RhcmdldFJlY3Q7CisgICAgV2ViQ29yZTo6
SW50UG9pbnQgbV9zdXJmYWNlT2Zmc2V0OworICAgIGZsb2F0IG1fc2NhbGU7CisgICAgaW50IG1f
cmVwYWludENvdW50OworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgOiBwdWJs
aWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgdm9p
ZCBjcmVhdGVUaWxlKGludCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGlsZShpbnQpOworICAg
IHZvaWQgdXBkYXRlVGlsZShpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKTsgfQorICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlciopOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSopOwor
Citwcml2YXRlOgorICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKCkKKyAgICAgICAgOiBtX3Nj
YWxlKDEuKQorICAgIHsgfQorICAgIEhhc2hNYXA8aW50LCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGU+IG1fdGlsZXM7CisgICAgVmVjdG9yPGludD4gbV90aWxlc1RvUmVtb3ZlOworICAgIGZs
b2F0IG1fc2NhbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZgorCisjZW5k
aWYgLy8gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YjBhNWEzOTU1ZWIxNWZiZWQ2
MGQzOWY2Nzk5NGY5Y2MwNGYyZjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5j
cHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJMYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvck1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJVcGRh
dGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKKyAgICA6IG1f
ZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQorICAgICwgbV9yZW5kZXJlcihhZG9w
dFJlZihuZXcgTGF5ZXJUcmVlUmVuZGVyZXIodGhpcykpKQorICAgICwgbV9sYXN0U2VudFNjYWxl
KDApCit7Cit9CisKK0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGlu
YXRvclByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklE
LCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9yTGF5
ZXIobGF5ZXJJRCwgdGlsZUlELCB0YXJnZXRSZWN0LCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQs
IGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZh
Y2U+IHN1cmZhY2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaW50IHRva2VuID0g
dXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlLmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgaWYg
KHRva2VuKSB7CisgICAgICAgIEhhc2hNYXA8dWludDMyX3QsIFJlZlB0cjxTaGFyZWFibGVTdXJm
YWNlPiA+OjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZXMuZmluZCh0b2tlbik7CisgICAgICAgIGlm
IChpdCA9PSBtX3N1cmZhY2VzLmVuZCgpKSB7CisgICAgICAgICAgICBzdXJmYWNlID0gU2hhcmVh
YmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUluZm8uc3VyZmFjZUhhbmRsZSk7CisgICAgICAgICAg
ICBtX3N1cmZhY2VzLmFkZCh0b2tlbiwgc3VyZmFjZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgc3VyZmFjZSA9IGl0LT5zZWNvbmQ7CisgICAgfSBlbHNlCisgICAgICAgIHN1cmZhY2Ug
PSBTaGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKKyNl
bHNlCisgICAgc3VyZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1
cmZhY2VIYW5kbGUpOworI2VuZGlmCisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
TGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0YXJn
ZXRSZWN0LCBzdXJmYWNlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30K
Kwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVy
KFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAgIHVwZGF0ZVZp
ZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlk
KSk7CisgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2Vi
TGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykpOworfQor
Cit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGls
ZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkcmVuKQor
eworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNo
aWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKK30KKworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZmlsdGVycykpOworfQorI2Vu
ZGlmCisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQor
eworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVy
Q2hhbmdlcywgbV9yZW5kZXJlci5nZXQoKSkpOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5LCBiaXRtYXAp
KTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95RGlyZWN0bHlD
b21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSwgbV9yZW5kZXJlci5nZXQoKSwga2V5KSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0Q29udGVudHNTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNv
bnRlbnRzU2l6ZSkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29u
c3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICAvLyBJbmZvcm0gdGhlIHJl
bmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fcmVu
ZGVyZXIuZ2V0KCksIHJlY3QpKTsKKworICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2Yg
ZW5jbG9zaW5nIGl0IHRvIG1ha2Ugc3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzIHRoZSBzYW1lIHdo
aWxlIHBhbm5pbmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCisgICAg
SW50UmVjdCByb3VuZGVkUmVjdCA9IHJvdW5kZWRJbnRSZWN0KHJlY3QpOworICAgIGlmIChyb3Vu
ZGVkUmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2NhbGUgPT0gbV9sYXN0U2VudFNj
YWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpTZXRWaXNpYmxlQ29udGVu
dHNSZWN0KHJvdW5kZWRSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgbV9sYXN0U2VudFZpc2libGVSZWN0ID0g
cm91bmRlZFJlY3Q7CisgICAgbV9sYXN0U2VudFNjYWxlID0gc2NhbGU7CisgICAgbV9sYXN0U2Vu
dFRyYWplY3RvcnlWZWN0b3IgPSB0cmFqZWN0b3J5VmVjdG9yOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9kcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24sIG1f
cmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c3luY0NhbnZhcyh1aW50MzJfdCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6
ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlk
LCBjYW52YXNTaXplLCBncmFwaGljc1N1cmZhY2VUb2tlbikpOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cGFnZUlEKCkpOworfQorCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ2ZjE1ZDFkMzEwZWQzNjQ5ZmE3ODkwYTZlMWU4ZTM1ZTMyYTMzMjEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRvclByb3h5X2gKKyNkZWZpbmUgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisK
KyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5Lmgi
CisjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNp
bmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCitRVF9CRUdJ
Tl9OQU1FU1BBQ0UKK2NsYXNzIFFTR05vZGU7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJMYXllckluZm87CitjbGFzcyBMYXllclRyZWVSZW5kZXJl
cjsKK2NsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKKworY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eSB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5n
QXJlYVByb3h5Kik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOwor
ICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxh
eWVySW5mbyYpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKFdlYkxheWVy
SUQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdlYkxheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorICAgIHZvaWQgZGVsZXRlQ29tcG9z
aXRpbmdMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVy
KFdlYkxheWVySUQpOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Cisg
ICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7
CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZv
aWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90LCBjb25zdCBXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlJik7CisgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Uo
aW50NjRfdCk7CisgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOworICAgIHZvaWQg
cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgcG9zaXRpb24pOworICAgIHZvaWQgc3luY0NhbnZhcyh1aW50
MzJfdCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4pOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAg
TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlci5nZXQoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdp
bmdBcmVhUHJveHk7CisgICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOwor
ICAgIFdlYkNvcmU6OkludFJlY3QgbV9sYXN0U2VudFZpc2libGVSZWN0OworICAgIGZsb2F0IG1f
bGFzdFNlbnRTY2FsZTsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbGFzdFNlbnRUcmFqZWN0
b3J5VmVjdG9yOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIEhhc2hNYXA8dWludDMy
X3QsIFJlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiA+IG1fc3VyZmFjZXM7CisjZW5kaWYKK307CisK
K30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvclByb3h5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3Nh
Z2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjllY2EwMzJmZjQxNjFlMTFkMDI5ZTU4NDhhMjM4N2IzNzk2OGZh
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAg
KzEsMzggQEAKKyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorIyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyMKKyMgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisjICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCittZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsK
KyAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6V2ViTGF5
ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMy
X3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCisjZW5kaWYKKyAgICBTZXRSb290Q29tcG9zaXRpbmdM
YXllcih1aW50MzJfdCBpZCkKKyAgICBEZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlk
KQorICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBX
ZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBk
YXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJ
bmZvIHVwZGF0ZUluZm8pCisgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQs
IGludCB0aWxlSUQpCisgICAgQ3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlKQorICAgIERlc3Ryb3lE
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKKyAgICBEaWRSZW5kZXJGcmFtZSgp
CisgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24p
CisgICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXpl
LCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3MDRlNWUzMWQ5NGNkNTk1MjIxNTMw
NWM2YTMxYzMzYmZiMGU2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAgLTAsMCAr
MSw0OTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVy
LmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJp
dG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1
ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE1haW5UaHJlYWRHdWFyZGVkSW52
b2tlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY2FsbChQYXNzUmVmUHRyPFQ+IG9iamVj
dFRvR3VhcmQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+KiBpbnZva2VyID0gbmV3IE1haW5UaHJlYWRH
dWFyZGVkSW52b2tlcjxUPihvYmplY3RUb0d1YXJkLCBmdW5jdGlvbik7CisgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoaW52b2tlLCBpbnZva2VyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFp
blRocmVhZEd1YXJkZWRJbnZva2VyKFBhc3NSZWZQdHI8VD4gb2JqZWN0LCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBuZXdGdW5jdGlvbikKKyAgICAgICAgOiBvYmplY3RUb0d1YXJkKG9iamVjdCkK
KyAgICAgICAgLCBmdW5jdGlvbihuZXdGdW5jdGlvbikKKyAgICB7CisgICAgfQorCisgICAgUmVm
UHRyPFQ+IG9iamVjdFRvR3VhcmQ7CisgICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbjsKKyAg
ICBzdGF0aWMgdm9pZCBpbnZva2Uodm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIE1haW5UaHJl
YWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IHN0YXRpY19jYXN0PE1haW5UaHJlYWRHdWFy
ZGVkSW52b2tlcjxUPio+KGRhdGEpOworICAgICAgICBpbnZva2VyLT5mdW5jdGlvbigpOworICAg
ICAgICBkZWxldGUgaW52b2tlcjsKKyAgICB9Cit9OworCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UKKyAg
ICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZVJlbmRlcmVyPjo6Y2FsbCh0
aGlzLCBmdW5jdGlvbik7Cit9CisKK3N0YXRpYyBGbG9hdFBvaW50IGJvdW5kZWRTY3JvbGxQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2
aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUpCit7CisgICAg
ZmxvYXQgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueCgpLCAwLjBm
KTsKKyAgICBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblgsIGNvbnRl
bnRTaXplLndpZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7CisKKyAgICBmbG9h
dCBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi55KCksIDAuMGYpOwor
ICAgIHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWSwgY29udGVudFNp
emUuaGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBG
bG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsKK30KKworTGF5ZXJU
cmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkq
IGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgOiBtX2xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkobGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoSW52
YWxpZFdlYkxheWVySUQpCisgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQoreworfQorCitMYXllclRy
ZWVSZW5kZXJlcjo6fkxheWVyVHJlZVJlbmRlcmVyKCkKK3sKK30KKworUGFzc093blB0cjxHcmFw
aGljc0xheWVyPiBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXll
cklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1Rl
eHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7CisgICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJh
Y2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVy
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3Qg
RmxvYXRSZWN0JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdz
KQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIg
PSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAg
QVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBw
ZXI6Ok9wZW5HTE1vZGUpOworCisgICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwor
ICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBp
ZiAoIWN1cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExheWVyKTsK
KworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRUZXh0
dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5i
ZWdpblBhaW50aW5nKFBhaW50RmxhZ3MpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlw
KFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKKworICAgIGlmIChjdXJyZW50Um9v
dExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zv
cm0oKSAhPSBtYXRyaXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShv
cGFjaXR5KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7
CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOworICAgIH0KKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1h
cHBlci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKK30K
Kwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5n
U3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IHBhaW50ZXIpCit7CisgICAgaWYgKCFtX3Rl
eHR1cmVNYXBwZXIpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNy
ZWF0ZSgpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9
PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7
CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJv
b3RMYXllcigpKTsKKworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7CisgICAgbV90ZXh0dXJl
TWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0
dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhp
Y3NDb250ZXh0KDApOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRDb250ZW50c1Np
emUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250
ZW50c1NpemUgPSBjb250ZW50c1NpemU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fdmlz
aWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVw
ZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMo
KQoreworICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25zIGFyZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJv
Y2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJsZSBjb250ZW50cyByZWN0IC8gc2Nyb2xsIHBv
c2l0aW9uLgorICAgIC8vIElmIHdlIHdhbnQgdGhvc2UgbGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0
ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUgYmV0d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBk
YXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKKyAgICAvLyB0aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVu
IHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0IHVz
ZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KKyAgICBGbG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uID0g
Ym91bmRlZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBt
X3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKKyAgICBGbG9hdFBvaW50IHJl
bmRlcmVkU2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV9yZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb24sIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1Np
emUpOworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHNjcm9sbFBvc2l0aW9uIC0gcmVuZGVyZWRTY3Jv
bGxQb3NpdGlvbjsKKworICAgIExheWVyTWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJz
LmVuZCgpOworICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0
LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOworfQorCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52
YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWlu
dDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCit7CisgICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0
eSgpIHx8ICFtX3RleHR1cmVNYXBwZXIpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChpZCk7CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZTsKKyAgICBTdXJmYWNlQmFja2luZ1N0b3Jl
TWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmluZChpZCk7CisgICAg
aWYgKGl0ID09IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZW5kKCkpIHsKKyAgICAgICAgY2FudmFz
QmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgp
OworICAgICAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0
b3JlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29u
ZDsKKworICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNz
U3VyZmFjZVRva2VuLCBjYW52YXNTaXplKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlh
KGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2Vi
TGF5ZXJJRD4mIGNoaWxkSURzKQoreworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1h
cDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGl0LT5zZWNvbmQ7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgV2ViTGF5ZXJJRCBjaGlsZElEID0gY2hpbGRJRHNbaV07CisgICAgICAgIEdyYXBoaWNz
TGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBpZiAoIWNoaWxkKSB7
CisgICAgICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKKyAg
ICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7CisgICAgICAgIH0KKyAgICAg
ICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxkcmVu
KGNoaWxkcmVuKTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQoreworICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6
aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9sYXll
cnMuZW5kKCkpOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAg
IGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnNldExheWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluZm8pCit7CisgICAgZW5zdXJlTGF5ZXIoaWQpOworICAgIExheWVyTWFwOjppdGVy
YXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5l
bmQoKSk7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisKKyAgICBs
YXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7
CisgICAgbGF5ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKKwor
ICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKKyAgICBsYXllci0+c2V0U2l6
ZShsYXllckluZm8uc2l6ZSk7CisgICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJh
bnNmb3JtKTsKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50
KTsKKyAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJh
bnNmb3JtKTsKKyAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNr
ZmFjZVZpc2libGUpOworICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29u
dGVudHNPcGFxdWUpOworICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRl
bnRzUmVjdCk7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250
ZW50KTsKKyAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zp
c2libGUpOworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhl
ZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBpZiAobGF5ZXJJ
bmZvLmZpeGVkVG9WaWV3cG9ydCkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVy
KTsKKyAgICBlbHNlCisgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKKworICAgIGFz
c2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwor
CisgICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRN
YXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1h
c2tzVG9Cb3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsK
KyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICBp
ZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisgICAgICAg
IHNldFJvb3RMYXllcklEKGlkKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRl
TGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9sYXllcnMucmVtb3ZlKGxheWVy
SUQpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVySUQpOwor
I2VuZGlmCisgICAgZGVsZXRlIGxheWVyOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OmVuc3VyZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRo
ZSBuZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAorICAgIC8vIGJl
Y2F1c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KKyAgICBpZiAobV9sYXllcnMuZmluZChpZCkg
PT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIo
aWQpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXll
cklEKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXll
cklEKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKKwor
ICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgaWYgKCFsYXllcklE
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJ
RChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jv
b3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQg
aWQpCit7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxh
eWVyKGxheWVyQnlJRChpZCkpOworICAgIEFTU0VSVChsYXllcik7CisgICAgUmVmUHRyPENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CisgICAgaWYgKCFi
YWNraW5nU3RvcmUpIHsKKyAgICAgICAgYmFja2luZ1N0b3JlID0gQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OmNyZWF0ZSgpOworICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZS5nZXQoKSk7CisgICAgfQorICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIHJldHVy
biBiYWNraW5nU3RvcmU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUo
V2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBnZXRC
YWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQg
dGlsZUlEKQoreworICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxl
SUQpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIFJl
ZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0
b3JlKGxheWVySUQpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0
ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGFyZ2V0UmVjdCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5v
ZmZzZXQpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2lu
Z1N0b3JlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRf
dCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3sKKyAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOworICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLT51
cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KS5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZShpbnQ2
NF90IGltYWdlSUQpCit7CisgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGlt
YWdlSUQpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBpZiAoIWltYWdl
SUQpIHsKKyAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
ZmluZChpbWFnZUlEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuZW5kKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQo
KSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkK
K3sKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0
b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOworICAgIGZv
ciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0
ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgKCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBl
ci5nZXQoKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIo
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQorewor
ICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRD
b250ZW50c1Njcm9sbFBvc2l0aW9uOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKEZsb2F0UmVjdCgpKTsKKyAgICBjb21taXRUaWxlT3BlcmF0aW9ucygpOworCisgICAg
Ly8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwg
dGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBjYWxsT25N
YWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMp
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAg
ICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHktPnJlbmRlck5leHRGcmFtZSgpOworfQorCit2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgIG1fdGV4dHVy
ZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2Rl
KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVy
LmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKHRydWUpOworICAgIH0K
KworICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOworICAg
IG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDNEKDAsIDAsIDApKTsKKworICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBu
b3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCisgICAgbV9y
b290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CisgICAgdG9UZXh0dXJlTWFw
cGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1h
cHBlci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNSZW1vdGVDb250
ZW50KCkKK3sKKyAgICAvLyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVy
aW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNvbnRleHQuCisgICAgZW5z
dXJlUm9vdExheWVyKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVuZGVyUXVl
dWUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fcmVuZGVyUXVldWVbaV0oKTsKKworICAgIG1fcmVu
ZGVyUXVldWUuY2xlYXIoKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJl
c291cmNlcygpCit7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1h
cHBlckxheWVyKHJvb3RMYXllcigpKTsKKworICAgIGlmIChsYXllcikKKyAgICAgICAgbGF5ZXIt
PmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOworCisgICAgbV9kaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZXMuY2xlYXIoKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzLmNsZWFyKCk7CisjZW5kaWYKKworICAgIG1fcm9vdExheWVyLT5yZW1v
dmVBbGxDaGlsZHJlbigpOworICAgIG1fcm9vdExheWVyLmNsZWFyKCk7CisgICAgbV9yb290TGF5
ZXJJRCA9IEludmFsaWRXZWJMYXllcklEOworICAgIG1fbGF5ZXJzLmNsZWFyKCk7CisgICAgbV9m
aXhlZExheWVycy5jbGVhcigpOworICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworCisgICAgc2V0QWN0aXZl
KGZhbHNlKTsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VCYWNraW5n
U3RvcmVzKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCit7CisgICAg
bV9sYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gMDsKK30KKwordm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6YXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorewor
ICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZW5kZXJRdWV1
ZS5hcHBlbmQoZnVuY3Rpb24pOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBY3Rp
dmUoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNh
c2VzLgorICAgIC8vIElmIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFj
dGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9m
IHBhaW50IG5vZGUKKyAgICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNy
ZWF0ZWQgaW5zdGFuY2UuCisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOworICAgIG1faXNBY3Rp
dmUgPSBhY3RpdmU7CisgICAgaWYgKG1faXNBY3RpdmUpCisgICAgICAgIHJlbmRlck5leHRGcmFt
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEyM2JlMzhjNTljMjIwZTU1ZWFiMDgxNzk4ZmI1ODAwMzdiOTEzNWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIExheWVyVHJlZVJlbmRlcmVyX2gKKyNkZWZpbmUgTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZVN1cmZhY2Uu
aCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50
U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOworY2xhc3MgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTsKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVy
VXBkYXRlSW5mbzsKKworY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudCB7CitwdWJsaWM6CisgICAgc3RydWN0IFRpbGVVcGRhdGUgeworICAgICAgICBX
ZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Q7CisgICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGFy
Z2V0UmVjdDsKKyAgICAgICAgUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IHN1cmZhY2U7CisgICAg
ICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKKyAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldCwg
UGFzc1JlZlB0cjxTaGFyZWFibGVTdXJmYWNlPiBuZXdTdXJmYWNlLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgbmV3T2Zmc2V0KQorICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKKyAg
ICAgICAgICAgICwgdGFyZ2V0UmVjdCh0YXJnZXQpCisgICAgICAgICAgICAsIHN1cmZhY2UobmV3
U3VyZmFjZSkKKyAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgfTsKKyAgICBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRv
clByb3h5Kik7CisgICAgdmlydHVhbCB+TGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICB2b2lkIHB1
cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKKyAgICB2
b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCk7CisgICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0Q29u
dGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb3NpdGlvbik7Cisg
ICAgdm9pZCBzeW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
YW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbik7CisKKyAgICB2b2lkIGRl
dGFjaCgpOworICAgIHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
KyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisK
KyAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQpOworICAgIHZvaWQgc2V0Um9vdExheWVy
SUQoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNv
bnN0IFZlY3RvcjxXZWJMYXllcklEPiYpOworICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShXZWJMYXll
cklELCBjb25zdCBXZWJMYXllckluZm8mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAg
dm9pZCBzZXRMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOworI2VuZGlmCisKKyAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
LCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Cisg
ICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgVGlsZVVwZGF0ZSYpOwor
ICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0
X3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPik7CisgICAgdm9pZCBkZXN0cm95SW1hZ2Uo
aW50NjRfdCk7CisKK3ByaXZhdGU6CisgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGxheWVyQnlJRChXZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxh
eWVySUQpID8gMCA6IG1fbGF5ZXJzLmdldChpZCk7IH0KKyAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgLy8g
UmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50LgorICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWly
ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgYm9vbCBz
aG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQorICAgIHZvaWQgY2FsbE9uTWFpblRyZWFkKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXll
cnMoKTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKj4gTGF5ZXJNYXA7CisgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXpl
OworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7CisKKyAgICAv
LyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhyZWFkIG9yIHVw
ZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQorICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4g
bV9yZW5kZXJRdWV1ZTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBPd25QdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKKyAgICBI
YXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
PiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIEhhc2hTZXQ8UmVmUHRyPENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsK
KyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHR5cGVkZWYgSGFzaE1hcDxX
ZWJMYXllcklELCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKKyAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFw
IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7CisjZW5kaWYKKworICAgIHZvaWQgc2NoZWR1bGVXZWJW
aWV3VXBkYXRlKCk7CisgICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7CisgICAgdm9pZCBh
c3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3QgaW1hZ2VJ
RCk7CisgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKKyAgICB2b2lkIGVuc3VyZUxheWVyKFdl
YkxheWVySUQpOworICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoKTsKKyAgICB2b2lkIHN5
bmNBbmltYXRpb25zKCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5OworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX3Jvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0
ZTsKKworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIExheWVyTWFwIG1fZml4ZWRMYXllcnM7
CisgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIFdlYkNvcmU6OkludFBvaW50IG1f
cmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOworICAgIFdlYkNvcmU6OkludFBvaW50IG1f
cGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1faXNBY3Rp
dmU7Cit9OworCit9OworCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
ZW5kaWYgLy8gTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcAppbmRleCA1ZjdiMTA2NTQ3MTQ3Nzc2Njc3NDIyZTdh
YjZmY2UxMGI0ZDc1MjU2Li43OWU2MTBlOTYxZGNkZmVjNWU4ODk3NGZmMTk2NDM3YWQ4YzU1NTM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAotI2lmIFVTRShV
SV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSA8Q29yZUlQQy9NZXNz
YWdlSUQuaD4KICNlbmRpZgpAQCAtNTgsNyArNTgsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHk6
OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0
KQogICAgIHNpemVEaWRDaGFuZ2UoKTsKIH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIHZvaWQgRHJhd2luZ0FyZWFQcm94eTo6
dXBkYXRlVmlld3BvcnQoKQogewogICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNw
bGF5KHZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHkuaAppbmRleCA5OTQ2MGU0OTlhMDNjOTNhYmI1OGJjM2YzZGVmYjBlOTNj
M2UxZGQ0Li41YzJkNTA4YzQ2MGIxOGY4ZDgyMmEyYWI2MmNjMGVhYjEzNzA0ZWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTkwLDcgKzkwLDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNvbG9yU3BhY2VEaWRDaGFuZ2UoKSB7IH0K
IAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRl
bnRzUmVjdCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCgp
IGNvbnN0OwpAQCAtMTEzLDcgKzExMyw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2l6ZTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCi0jaWYg
VVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQog
ICAgIE93blB0cjxMYXllclRyZWVDb29yZGluYXRvclByb3h5PiBtX2xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggY2Q4YzVmNjI5ZmE3M2UxOTVmMDNjMzk2NzNkNDUx
MTY1M2RlMDI2My4uY2Q5Y2FmYzE3NjRjNDc1ZGE3YmRhZGQ3N2JkMDJmZDA2M2ViYTk5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3Bw
CkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZWdpb24uaD4KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRv
clByb3h5LmgiCiAjZW5kaWYKIApAQCAtNTgsNyArNTgsNyBAQCBEcmF3aW5nQXJlYVByb3h5SW1w
bDo6RHJhd2luZ0FyZWFQcm94eUltcGwoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAgICAg
LCBtX2lzQmFja2luZ1N0b3JlRGlzY2FyZGFibGUodHJ1ZSkKICAgICAsIG1fZGlzY2FyZEJhY2tp
bmdTdG9yZVRpbWVyKFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkRyYXdpbmdBcmVhUHJveHlJ
bXBsOjpkaXNjYXJkQmFja2luZ1N0b3JlKQogewotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5H
KQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHBy
b3h5IGVhcmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNz
IHdoaWxlIEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdy
b3VwKCktPnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgIG1f
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KHRoaXMpKTsKQEAgLTM1MywxMyArMzUzLDEzIEBAIHZvaWQgRHJhd2luZ0FyZWFQ
cm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVl
Q29udGV4CiAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fbGF5ZXJUcmVlQ29u
dGV4dCA9IGxheWVyVHJlZUNvbnRleHQ7CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7Ci0jaWYgVVNFKFVJX1NJREVf
Q09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIGlmICghbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5KQogICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0aGlzKSk7CiAj
ZW5kaWYKIH0KIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXll
clRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0
aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29k
ZXIqIGFyZ3VtZW50cykKIHsKICAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBs
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRl
eCAxOWE3NzFmMmNiNTc2MWM3YzRmYzEwYjc3MTBkYmY3ZTIwNTc3NDRmLi4wYzlmMDRmOGUwMmRh
OGYwY2RiYzBhMzAxMGY1ZjA0MWZhMzM5OTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtODEsNyArODEsNyBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBjb25zdCB7IHJldHVy
biAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKTsgfQogCi0jaWYgVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZpcnR1YWwgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJs
ZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRy
YWplY3RvcnkpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFlZTMyNDA0MjQxYjQwMWVlZDllNWZlMjU1OTk4Mzc2Yzk1MmMzZjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgIldlYkxh
eWVyVHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQotICAgIDogbV9k
cmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCi0gICAgLCBtX3JlbmRlcmVyKGFkb3B0
UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCi0gICAgLCBtX2xhc3RTZW50U2Nh
bGUoMCkKLXsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6fkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoKQotewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24pCi17Ci0gICAgbV9yZW5kZXJlci0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxh
eWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVG
b3JMYXllcihsYXllcklELCB0aWxlSUQsIHRhcmdldFJlY3QsIHVwZGF0ZUluZm8pOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5
ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxl
U3VyZmFjZT4gc3VyZmFjZTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpbnQgdG9r
ZW4gPSB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUuZ3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKLSAg
ICBpZiAodG9rZW4pIHsKLSAgICAgICAgSGFzaE1hcDx1aW50MzJfdCwgUmVmUHRyPFNoYXJlYWJs
ZVN1cmZhY2U+ID46Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHRva2VuKTsKLSAgICAg
ICAgaWYgKGl0ID09IG1fc3VyZmFjZXMuZW5kKCkpIHsKLSAgICAgICAgICAgIHN1cmZhY2UgPSBT
aGFyZWFibGVTdXJmYWNlOjpjcmVhdGUodXBkYXRlSW5mby5zdXJmYWNlSGFuZGxlKTsKLSAgICAg
ICAgICAgIG1fc3VyZmFjZXMuYWRkKHRva2VuLCBzdXJmYWNlKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBzdXJmYWNlID0gaXQtPnNlY29uZDsKLSAgICB9IGVsc2UKLSAgICAgICAgc3Vy
ZmFjZSA9IFNoYXJlYWJsZVN1cmZhY2U6OmNyZWF0ZSh1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUp
OwotI2Vsc2UKLSAgICBzdXJmYWNlID0gU2hhcmVhYmxlU3VyZmFjZTo6Y3JlYXRlKHVwZGF0ZUlu
Zm8uc3VyZmFjZUhhbmRsZSk7Ci0jZW5kaWYKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwg
dGlsZUlELCBXZWJMYXllclRyZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0
ZVJlY3QsIHRhcmdldFJlY3QsIHN1cmZhY2UsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQs
IHRpbGVJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OmRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlk
KSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCwg
bV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJM
YXllcklEIGlkLCBjb25zdCBXZWJMYXllckluZm8mIGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxX
ZWJMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBj
aGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIu
Z2V0KCksIGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgp
KSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3Qg
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUlt
YWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXksIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90
IGtleSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6
ZGVzdHJveUltYWdlLCBtX3JlbmRlcmVyLmdldCgpLCBrZXkpKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250
ZW50c1NpemUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0
cmFqZWN0b3J5VmVjdG9yKQotewotICAgIC8vIEluZm9ybSB0aGUgcmVuZGVyZXIgdG8gYWRqdXN0
IHZpZXdwb3J0LWZpeGVkIGxheWVycy4KLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJlci5nZXQoKSwg
cmVjdCkpOwotCi0gICAgLy8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNsb3NpbmcgaXQg
dG8gbWFrZSBzdXJlIHRoYXQgaXRzIHNpemUgc3RheXMgdGhlIHNhbWUgd2hpbGUgcGFubmluZy4g
VGhpcyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3RzIG9uIGxheW91dC4KLSAgICBJbnRSZWN0IHJvdW5k
ZWRSZWN0ID0gcm91bmRlZEludFJlY3QocmVjdCk7Ci0gICAgaWYgKHJvdW5kZWRSZWN0ID09IG1f
bGFzdFNlbnRWaXNpYmxlUmVjdCAmJiBzY2FsZSA9PSBtX2xhc3RTZW50U2NhbGUgJiYgdHJhamVj
dG9yeVZlY3RvciA9PSBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OlNldFZpc2libGVDb250ZW50c1JlY3Qocm91bmRl
ZFJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnBhZ2VJRCgpKTsKLSAgICBtX2xhc3RTZW50VmlzaWJsZVJlY3QgPSByb3VuZGVkUmVjdDsK
LSAgICBtX2xhc3RTZW50U2NhbGUgPSBzY2FsZTsKLSAgICBtX2xhc3RTZW50VHJhamVjdG9yeVZl
Y3RvciA9IHRyYWplY3RvcnlWZWN0b3I7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2Uo
KS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6UmVuZGVy
TmV4dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldl
YkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5n
ZXQoKSwgcG9zaXRpb24pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5Ojpz
eW5jQ2FudmFzKHVpbnQzMl90IGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJf
dCBncmFwaGljc1N1cmZhY2VUb2tlbikKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZh
c1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
cjo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdl
SUQoKSk7Ci19Ci0KLX0KLSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWQzM2E4MTA1NjljODFhOTlmOGIyZmFh
ZTA0NzQ0Y2MxMmNmN2VkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAotI2RlZmluZSBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5X2gKLQotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVk
ZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1
ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAi
V2ViTGF5ZXJUcmVlSW5mby5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotUVRfQkVHSU5fTkFNRVNQ
QUNFCi1jbGFzcyBRU0dOb2RlOwotUVRfRU5EX05BTUVTUEFDRQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViTGF5ZXJJbmZvOwotY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXI7Ci1j
bGFzcyBXZWJMYXllclVwZGF0ZUluZm87Ci0KLWNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkgewotcHVibGljOgotICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQ
cm94eSopOwotICAgIHZpcnR1YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICB2
b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllcklu
Zm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBj
b25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
dm9pZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5n
TGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJM
YXllcklEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwotICAgIHZv
aWQgcHVyZ2VHTFJlc291cmNlcygpOwotICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3Rvcik7Ci0gICAgdm9pZCBkaWRSZW5kZXJGcmFtZSgpOwotICAg
IHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVw
ZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCByZW1vdmVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpOwotICAgIHZvaWQgY3JlYXRlRGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSYpOwotICAgIHZvaWQgZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0
X3QpOwotICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciopOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2b2lkIHJlbmRl
ck5leHRGcmFtZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3Qg
aWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNz
U3VyZmFjZVRva2VuKTsKLSAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgIFdlYkxh
eWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXIuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgZGlzcGF0Y2hVcGRhdGUoY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5n
QXJlYVByb3h5OwotICAgIFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKLSAgICBmbG9hdCBt
X2xhc3RTZW50U2NhbGU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVj
dG9yeVZlY3RvcjsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBIYXNoTWFwPHVpbnQz
Ml90LCBSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gPiBtX3N1cmZhY2VzOwotI2VuZGlmCi19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
Mjg0YjkxNWJkODZmNTY1YzFjYjZmYWMwMjBhOTM2OGI5MTliZGJiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEs
MzggKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi1tZXNzYWdl
cyAtPiBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6V2ViTGF5ZXJJbmZvIGxheWVySW5mbykKLSAgICBT
ZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4g
Y2hpbGRyZW4pCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFNldENvbXBvc2l0aW5nTGF5
ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMp
Ci0jZW5kaWYKLSAgICBTZXRSb290Q29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKLSAgICBE
ZWxldGVDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIENyZWF0ZVRpbGVGb3JMYXll
cih1aW50MzJfdCBsYXllcklELCBpbnQgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRhcmdldFJl
Y3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxl
Rm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgaW50IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0
YXJnZXRSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCi0gICAgUmVt
b3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIGludCB0aWxlSUQpCi0gICAgQ3JlYXRl
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIFdlYktpdDo6U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGUgaGFuZGxlKQotICAgIERlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShp
bnQ2NF90IGtleSkKLSAgICBEaWRSZW5kZXJGcmFtZSgpCi0gICAgRGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9zaXRpb24pCi0gICAgU3luY0NhbnZhcyh1aW50MzJf
dCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZh
Y2VUb2tlbikKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkxheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJM
YXllclRyZWVSZW5kZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMmUw
OTZhZWI4ZGNhN2E5MGEwODNmYjQ2MDk2YjM1NmFiNzc5NTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxh
eWVyVHJlZVJlbmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgot
ICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoVUlfU0lERV9D
T01QT1NJVElORykKLQotI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCi0KLSNpbmNs
dWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkxheWVyQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgotI2luY2x1
ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgi
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxh
eWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+
Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXRlbXBs
YXRlPGNsYXNzIFQ+IGNsYXNzIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlciB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgY2FsbChQYXNzUmVmUHRyPFQ+IG9iamVjdFRvR3VhcmQsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTWFpblRocmVhZEd1YXJk
ZWRJbnZva2VyPFQ+KiBpbnZva2VyID0gbmV3IE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPihv
YmplY3RUb0d1YXJkLCBmdW5jdGlvbik7Ci0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoaW52b2tl
LCBpbnZva2VyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFpblRocmVhZEd1YXJkZWRJbnZv
a2VyKFBhc3NSZWZQdHI8VD4gb2JqZWN0LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBuZXdGdW5j
dGlvbikKLSAgICAgICAgOiBvYmplY3RUb0d1YXJkKG9iamVjdCkKLSAgICAgICAgLCBmdW5jdGlv
bihuZXdGdW5jdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFQ+IG9iamVjdFRvR3Vh
cmQ7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbjsKLSAgICBzdGF0aWMgdm9pZCBpbnZv
a2Uodm9pZCogZGF0YSkKLSAgICB7Ci0gICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxU
PiogaW52b2tlciA9IHN0YXRpY19jYXN0PE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPio+KGRh
dGEpOwotICAgICAgICBpbnZva2VyLT5mdW5jdGlvbigpOwotICAgICAgICBkZWxldGUgaW52b2tl
cjsKLSAgICB9Ci19OwotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJl
YWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRo
cmVhZCgpKQotICAgICAgICBmdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgTWFpblRocmVh
ZEd1YXJkZWRJbnZva2VyPFdlYkxheWVyVHJlZVJlbmRlcmVyPjo6Y2FsbCh0aGlzLCBmdW5jdGlv
bik7Ci19Ci0KLXN0YXRpYyBGbG9hdFBvaW50IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVu
dFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUpCi17Ci0gICAgZmxvYXQgc2Nyb2xs
UG9zaXRpb25YID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueCgpLCAwLjBmKTsKLSAgICBzY3Jv
bGxQb3NpdGlvblggPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblgsIGNvbnRlbnRTaXplLndpZHRo
KCkgLSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7Ci0KLSAgICBmbG9hdCBzY3JvbGxQb3Np
dGlvblkgPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi55KCksIDAuMGYpOwotICAgIHNjcm9sbFBv
c2l0aW9uWSA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWSwgY29udGVudFNpemUuaGVpZ2h0KCkg
LSB2aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVybiBGbG9hdFBvaW50KHNj
cm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsKLX0KLQotV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgOiBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZFdl
YkxheWVySUQpCi0gICAgLCBtX2lzQWN0aXZlKGZhbHNlKQotewotfQotCi1XZWJMYXllclRyZWVS
ZW5kZXJlcjo6fldlYkxheWVyVHJlZVJlbmRlcmVyKCkKLXsKLX0KLQotUGFzc093blB0cjxHcmFw
aGljc0xheWVyPiBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBs
YXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7Ci0gICAgbGF5ZXItPnNldFNob3VsZFVwZGF0
ZUJhY2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xh
eWVyKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWlu
dEZsYWdzKQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVN
YXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7
Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1
cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotCi0gICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVy
cygpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsK
LSAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExh
eWVyKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5z
ZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5iZWdpblBhaW50aW5nKFBhaW50RmxhZ3MpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVn
aW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKLQotICAgIGlmIChjdXJy
ZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50
cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOwotICAgIH0KLQotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmco
KTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4
dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0IHBhaW50ZXIpCi17Ci0gICAg
aWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZSgpOwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlv
bk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwotICAgIHN5bmNSZW1vdGVD
b250ZW50KCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBl
ckxheWVyKHJvb3RMYXllcigpKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7Ci0gICAgbV90
ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Ci0gICAgbGF5ZXItPnBhaW50KCk7Ci0g
ICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
c2V0R3JhcGhpY3NDb250ZXh0KDApOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBjb250ZW50c1NpemUpCi17
Ci0gICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci19Ci0KLXZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBpZiAobV9sYXllclRyZWVD
b29yZGluYXRvclByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnVw
ZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVzdFBv
c2l0aW9uRm9yRml4ZWRMYXllcnMoKQotewotICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25zIGFyZSB1
cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJsZSBjb250
ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgotICAgIC8vIElmIHdlIHdhbnQgdGhvc2UgbGF5
ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUgYmV0d2Vl
biB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKLSAgICAvLyB0aGVt
IGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUgcG9zaXRp
b24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KLSAgICBGbG9hdFBv
aW50IHNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRl
bnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXpl
KTsKLSAgICBGbG9hdFBvaW50IHJlbmRlcmVkU2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xs
UG9zaXRpb24obV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24sIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCwgbV9jb250ZW50c1NpemUpOwotICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHNjcm9sbFBv
c2l0aW9uIC0gcmVuZGVyZWRTY3JvbGxQb3NpdGlvbjsKLQotICAgIExheWVyTWFwOjppdGVyYXRv
ciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAoTGF5ZXJNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRv
VGV4dHVyZU1hcHBlckxheWVyKGl0LT5zZWNvbmQpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZO
ZWVkZWQoZGVsdGEpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgbV9wZW5kaW5n
UmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgV2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pCi17
Ci0gICAgaWYgKGNhbnZhc1NpemUuaXNFbXB0eSgpIHx8ICFtX3RleHR1cmVNYXBwZXIpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGVuc3VyZUxheWVy
KGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9y
ZTsKLSAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJh
Y2tpbmdTdG9yZXMuZmluZChpZCk7Ci0gICAgaWYgKGl0ID09IG1fc3VyZmFjZUJhY2tpbmdTdG9y
ZXMuZW5kKCkpIHsKLSAgICAgICAgY2FudmFzQmFja2luZ1N0b3JlID0gVGV4dHVyZU1hcHBlclN1
cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAgICBtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2Fu
dmFzQmFja2luZ1N0b3JlID0gaXQtPnNlY29uZDsKLQotICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+
c2V0R3JhcGhpY3NTdXJmYWNlKGdyYXBoaWNzU3VyZmFjZVRva2VuLCBjYW52YXNTaXplKTsKLSAg
ICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihX
ZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5ZXJJRD4mIGNoaWxkSURzKQotewotICAg
IGVuc3VyZUxheWVyKGlkKTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5m
aW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0gICAgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViTGF5ZXJJRCBjaGlsZElEID0g
Y2hpbGRJRHNbaV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxkID0gbGF5ZXJCeUlEKGNo
aWxkSUQpOwotICAgICAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgICAgICBjaGlsZCA9IGNyZWF0
ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJzLmFkZChjaGls
ZElELCBjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsK
LSAgICB9Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVy
cyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAg
IGVuc3VyZUxheWVyKGlkKTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5m
aW5kKGlkKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9sYXllcnMuZW5kKCkpOwotCi0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZpbHRl
cnMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3Rh
dGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCi17Ci0gICAg
ZW5zdXJlTGF5ZXIoaWQpOwotICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZp
bmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX2xheWVycy5lbmQoKSk7Ci0KLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0KLSAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5
TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNhKSk7Ci0gICAgbGF5ZXItPnNldE1hc2tM
YXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsKLQotICAgIGxheWVyLT5zZXRQb3NpdGlv
bihsYXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0g
ICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKLSAgICBsYXllci0+
c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKLSAgICBsYXllci0+c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKLSAgICBsYXllci0+
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOwotICAgIGxh
eWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwotICAgIGxh
eWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXIt
PnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsKLSAgICBsYXllci0+c2V0
Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zpc2libGUpOwotICAgIHRvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZv
LmZpeGVkVG9WaWV3cG9ydCk7Ci0KLSAgICBpZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkK
LSAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVyKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKLQotICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXll
ciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotCi0gICAgLy8gTmV2ZXIgbWFrZSB0
aGUgcm9vdCBsYXllciBjbGlwLgotICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5m
by5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwotICAgIGxh
eWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKLSAgICBsYXllci0+c2V0UHJlc2Vy
dmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKLSAgICBpZiAobGF5ZXJJbmZvLmlzUm9vdExh
eWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCi0gICAgICAgIHNldFJvb3RMYXllcklEKGlkKTsK
LX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBs
YXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQp
OwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5yZW1vdmVG
cm9tUGFyZW50KCk7Ci0gICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwotICAgIG1fZml4ZWRM
YXllcnMucmVtb3ZlKGxheWVySUQpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1f
c3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVySUQpOwotI2VuZGlmCi0gICAgZGVsZXRl
IGxheWVyOwotfQotCi0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZUxheWVyKFdl
YkxheWVySUQgaWQpCi17Ci0gICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRoZSBuZXcgbGF5ZXIncyBw
b2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAotICAgIC8vIGJlY2F1c2UgT3duUHRyIGlz
IG5vdCBjb3B5YWJsZS4KLSAgICBpZiAobV9sYXllcnMuZmluZChpZCkgPT0gbV9sYXllcnMuZW5k
KCkpCi0gICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIoaWQpLmxlYWtQdHIoKSk7
Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKFdlYkxheWVy
SUQgbGF5ZXJJRCkKLXsKLSAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIG1fcm9vdExh
eWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwotCi0gICAgaWYgKCFsYXllcklEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsK
LSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRk
Q2hpbGQobGF5ZXIpOwotfQotCi1QYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBXZWJMYXll
clRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCi17Ci0gICAgVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChp
ZCkpOwotICAgIEFTU0VSVChsYXllcik7Ci0gICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNr
aW5nU3RvcmUoKS5nZXQoKSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgYmFj
a2luZ1N0b3JlID0gTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+
c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgfQotICAgIEFTU0VSVChi
YWNraW5nU3RvcmUpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlE
LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRp
bGUodGlsZUlELCBzY2FsZSk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGdldEJhY2tpbmdT
dG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwotfQotCi12b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQotewotICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9y
ZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGFyZ2V0UmVj
dCwgdXBkYXRlLnN1cmZhY2UsIHVwZGF0ZS5vZmZzZXQpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dp
dGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5n
U3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3Jl
YXRlKCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tp
bmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBw
ZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOwotfQotCi12b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIs
IGludDY0X3QgaW1hZ2VJRCkKLXsKLSAgICBpZiAoIWltYWdlSUQpIHsKLSAgICAgICAgbGF5ZXIt
PnNldENvbnRlbnRzVG9NZWRpYSgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJh
dG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsKLSAgICBB
U1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAgIGxheWVy
LT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFRpbGVPcGVyYXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVz
V2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8TGF5ZXJC
YWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNvbW1pdFRp
bGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQotewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotCi0g
ICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKLSAgICBj
b21taXRUaWxlT3BlcmF0aW9ucygpOwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUg
aXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVu
ZGVyIHRoZSBuZXh0IG9uZS4KLSAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKLX0KLQotdm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKLXsKLSAgICBpZiAobV9sYXllclRyZWVDb29y
ZGluYXRvclByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnJlbmRl
ck5leHRGcmFtZSgpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVSb290
TGF5ZXIoKQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghbV90ZXh0dXJlTWFwcGVyKSB7Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxl
RWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKHRydWUpOwotICAgIH0KLQotICAgIG1fcm9vdExheWVy
ID0gY3JlYXRlTGF5ZXIoSW52YWxpZFdlYkxheWVySUQpOwotICAgIG1fcm9vdExheWVyLT5zZXRN
YXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZh
bHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAs
IDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUs
IG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUo
RmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0gICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5
ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci19Ci0K
LXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNSZW1vdGVDb250ZW50KCkKLXsKLSAgICAv
LyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0
aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNvbnRleHQuCi0gICAgZW5zdXJlUm9vdExheWVyKCk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fcmVuZGVyUXVldWVbaV0oKTsKLQotICAgIG1fcmVuZGVyUXVldWUuY2xlYXIo
KTsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCi17
Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJv
b3RMYXllcigpKTsKLQotICAgIGlmIChsYXllcikKLSAgICAgICAgbGF5ZXItPmNsZWFyQmFja2lu
Z1N0b3Jlc1JlY3Vyc2l2ZSgpOwotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xl
YXIoKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3Rv
cmVzLmNsZWFyKCk7Ci0jZW5kaWYKLQotICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJl
bigpOwotICAgIG1fcm9vdExheWVyLmNsZWFyKCk7Ci0gICAgbV9yb290TGF5ZXJJRCA9IEludmFs
aWRXZWJMYXllcklEOwotICAgIG1fbGF5ZXJzLmNsZWFyKCk7Ci0gICAgbV9maXhlZExheWVycy5j
bGVhcigpOwotICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOwotICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwotCi0gICAgc2V0QWN0aXZlKGZhbHNlKTsKLQot
ICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFj
a2luZ1N0b3JlcywgdGhpcykpOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJn
ZUJhY2tpbmdTdG9yZXMoKQotewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkp
Ci0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VCYWNraW5nU3RvcmVz
KCk7Ci19Ci0KLXZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCi17Ci0gICAgbV9s
YXllclRyZWVDb29yZGluYXRvclByb3h5ID0gMDsKLX0KLQotdm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6YXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewot
ICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZW5kZXJRdWV1
ZS5hcHBlbmQoZnVuY3Rpb24pOwotfQotCi12b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRB
Y3RpdmUoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3Ro
IGNhc2VzLgotICAgIC8vIElmIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5n
IGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNl
IG9mIHBhaW50IG5vZGUKLSAgICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5
IGNyZWF0ZWQgaW5zdGFuY2UuCi0gICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotICAgIG1faXNB
Y3RpdmUgPSBhY3RpdmU7Ci0gICAgaWYgKG1faXNBY3RpdmUpCi0gICAgICAgIHJlbmRlck5leHRG
cmFtZSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJU
cmVlUmVuZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4MTUyZTQwODNi
NDIzZTlkMzY4NDc2YjRlM2YwYmFlOGQ0YjRkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVl
UmVuZGVyZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0qLwotCi0jaWZuZGVmIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKLSNkZWZpbmUgV2ViTGF5ZXJU
cmVlUmVuZGVyZXJfaAotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAi
QmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCi0jaW5jbHVkZSAi
U2hhcmVhYmxlU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5m
by5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgTGF5ZXJCYWNraW5nU3RvcmU7Ci1j
bGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5OwotY2xhc3MgV2ViTGF5ZXJJbmZvOwotY2xh
c3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwotCi1jbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXZWJMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgVGlsZVVw
ZGF0ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCB0YXJnZXRSZWN0OwotICAgICAgICBSZWZQdHI8U2hhcmVhYmxlU3VyZmFj
ZT4gc3VyZmFjZTsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0OwotICAgICAgICBU
aWxlVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgdGFyZ2V0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+IG5ld1N1cmZhY2Us
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCi0gICAgICAgICAgICA6IHNvdXJj
ZVJlY3Qoc291cmNlKQotICAgICAgICAgICAgLCB0YXJnZXRSZWN0KHRhcmdldCkKLSAgICAgICAg
ICAgICwgc3VyZmFjZShuZXdTdXJmYWNlKQotICAgICAgICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotICAgIFdlYkxheWVyVHJlZVJlbmRlcmVy
KExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqKTsKLSAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVS
ZW5kZXJlcigpOwotICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwotICAgIHZvaWQgcGFpbnRU
b0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6
UGFpbnRGbGFncyA9IDApOwotICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5n
U3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLSAgICB2b2lkIHN5bmNSZW1vdGVDb250
ZW50KCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
Jik7Ci0gICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIHBvc2l0aW9uKTsKLSAgICB2b2lkIHN5bmNDYW52YXModWludDMyX3QgaWQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFj
ZVRva2VuKTsKLQotICAgIHZvaWQgZGV0YWNoKCk7Ci0gICAgdm9pZCBhcHBlbmRVcGRhdGUoY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2
b2lkIHNldEFjdGl2ZShib29sKTsKLQotICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7
Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKLSAgICB2b2lkIHNldExheWVy
Q2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkxheWVySUQ+Jik7Ci0gICAgdm9p
ZCBzZXRMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpOwotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldExheWVyRmlsdGVycyhXZWJMYXllcklELCBj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgY3Jl
YXRlVGlsZShXZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRp
bGUoV2ViTGF5ZXJJRCwgaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
LCBjb25zdCBUaWxlVXBkYXRlJik7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAg
IHZvaWQgY3JlYXRlSW1hZ2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsK
LSAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKLQotcHJpdmF0ZToKLSAgICBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwotCi0g
ICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0
dXJuIChpZCA9PSBJbnZhbGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9Ci0KLSAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikg
eyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNo
b3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Ci0gICAgdm9p
ZCBjYWxsT25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgYWRq
dXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxh
eWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAgICBXZWJDb3JlOjpG
bG9hdFNpemUgbV9jb250ZW50c1NpemU7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdDsKLQotICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255
IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCi0gICAgVmVj
dG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOwotCi0jaWYgVVNFKFRFWFRVUkVf
TUFQUEVSKQotICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBw
ZXI7Ci0gICAgUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdl
YkxheWVySUQpOwotICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0gICAgSGFz
aFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRl
ZiBIYXNoTWFwPFdlYkxheWVySUQsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU3VyZmFj
ZUJhY2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFja2luZ1N0b3JlTWFwOwotICAgIFN1cmZhY2VCYWNr
aW5nU3RvcmVNYXAgbV9zdXJmYWNlQmFja2luZ1N0b3JlczsKLSNlbmRpZgotCi0gICAgdm9pZCBz
Y2hlZHVsZVdlYlZpZXdVcGRhdGUoKTsKLSAgICB2b2lkIHN5bmNocm9uaXplVmlld3BvcnQoKTsK
LSAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50
NjRfdCBpbWFnZUlEKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwotICAgIHZvaWQgZW5z
dXJlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucygpOwot
ICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwot
ICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0KLSAgICBMYXllclRyZWVDb29yZGluYXRv
clByb3h5KiBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk7Ci0gICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xh
eWVyc1RvRGVsZXRlOwotCi0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgTGF5ZXJNYXAgbV9m
aXhlZExheWVyczsKLSAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotICAgIGJv
b2wgbV9pc0FjdGl2ZTsKLX07Ci0KLX07Ci0KLSNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJ
VElORykKLQotI2VuZGlmIC8vIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGZkMGMwZWFjYjk0MzdhNzlmM2I4
MGE3MDkyMzYzMWJlZTY0ODg0MWYuLjVjNTIyYzA2ZmE1NzVkNzYzNzZlN2MxMDMyOWQ0N2M4M2Nl
ODYxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05
NCw3ICs5NCw3IEBACiAjaW5jbHVkZSAiV2ViSW50ZW50U2VydmljZUluZm8uaCIKICNlbmRpZgog
Ci0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQogI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgogI2Vu
ZGlmCiAKQEAgLTE3NDcsNyArMTc0Nyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZl
TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpN
ZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvclByb3h5PigpKSB7CiAgICAgICAgIG1fZHJh
d2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShjb25u
ZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKaW5kZXggNGRlNzdm
NzBhMzk1YzZhMTEzNTQ2ODE2YWM5NTQ5ODc1NTg2NWE4OS4uZWI3MDIzOTkwMTk0OTYxYzlkYjgz
ZjVlNjNkNDFkMGIwY2I0OTI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVNHTm9kZS5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUuaCIKIAotI2luY2x1ZGUgIldlYkxheWVyVHJl
ZVJlbmRlcmVyLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlIDxR
dEd1aS9RUG9seWdvbkY+CiAjaW5jbHVkZSA8UXRRdWljay9RU0dTaW1wbGVSZWN0Tm9kZT4KICNp
bmNsdWRlIDxwcml2YXRlL3FzZ3JlbmRlcm5vZGVfcC5oPgpAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVudHNTR05vZGUgOiBwdWJsaWMgUVNHUmVuZGVy
Tm9kZSB7CiBwdWJsaWM6Ci0gICAgQ29udGVudHNTR05vZGUoUGFzc1JlZlB0cjxXZWJMYXllclRy
ZWVSZW5kZXJlcj4gcmVuZGVyZXIpCisgICAgQ29udGVudHNTR05vZGUoUGFzc1JlZlB0cjxMYXll
clRyZWVSZW5kZXJlcj4gcmVuZGVyZXIpCiAgICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikK
ICAgICB7CiAgICAgICAgIGxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZSh0cnVlKTsKQEAg
LTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBsYXllclRyZWVSZW5kZXJlcigpLT5wdXJn
ZUdMUmVzb3VyY2VzKCk7CiAgICAgfQogCi0gICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVy
VHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorICAgIExh
eWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBRUmVjdEYgY2xpcFJlY3QoKSBjb25zdApA
QCAtMTA1LDcgKzEwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiByZXN1bHRSZWN0Owog
ICAgIH0KIAotICAgIFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJlcjsKKyAg
ICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CiB9OwogCiBRdFdlYlBhZ2VT
R05vZGU6OlF0V2ViUGFnZVNHTm9kZSgpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBRdFdlYlBh
Z2VTR05vZGU6OnNldFNjYWxlKGZsb2F0IHNjYWxlKQogICAgIHNldE1hdHJpeChtYXRyaXgpOwog
fQogCi12b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxXZWJMYXll
clRyZWVSZW5kZXJlcj4gcmVuZGVyZXIpCit2b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0UmVuZGVy
ZXIoUGFzc1JlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4gcmVuZGVyZXIpCiB7CiAgICAgaWYgKG1f
Y29udGVudHNOb2RlICYmIG1fY29udGVudHNOb2RlLT5sYXllclRyZWVSZW5kZXJlcigpID09IHJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlU0dOb2RlLmgKaW5kZXggMjJhNWJjZmJhZWMyMGFiODM0Yzg4Nzg1YTczYWFiNTc2
NTU1Njg4Ni4uMTFkMTg5ODRlZGExZTg4MTc5MGY5MmViOWNhMmQxYWIxZWY0OTlkOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApAQCAtMzEsMTQg
KzMxLDE0IEBAIFFUX0VORF9OQU1FU1BBQ0UKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBD
b250ZW50c1NHTm9kZTsKLWNsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgTGF5ZXJU
cmVlUmVuZGVyZXI7CiAKIGNsYXNzIFF0V2ViUGFnZVNHTm9kZSA6IHB1YmxpYyBRU0dUcmFuc2Zv
cm1Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFF0V2ViUGFnZVNHTm9kZSgpOwogICAgICAg
ICB2b2lkIHNldEJhY2tncm91bmQoY29uc3QgUVJlY3RGJiwgY29uc3QgUUNvbG9yJik7CiAgICAg
ICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQpOwotICAgICAgICB2b2lkIHNldFJlbmRlcmVyKFBhc3NS
ZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+KTsKKyAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihQ
YXNzUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBD
b250ZW50c1NHTm9kZSogbV9jb250ZW50c05vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0M2RiZTBjYmE1MWNiNzQ0MmNkYmM0NzhhYmViMWVhZjc0ZTA5NWNlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTYzICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGF5ZXJCYWNraW5nU3RvcmUuaCIKLQot
I2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
LSNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5o
IgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpz
d2FwQnVmZmVycyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewotICAg
IGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGbG9hdFJlY3QgdGFyZ2V0
UmVjdChtX3RhcmdldFJlY3QpOwotICAgIHRhcmdldFJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsK
LSAgICBib29sIHNob3VsZFJlc2V0ID0gZmFsc2U7Ci0gICAgaWYgKHRhcmdldFJlY3QgIT0gcmVj
dCgpKSB7Ci0gICAgICAgIHNldFJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgICAgIHNob3VsZFJlc2V0
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0aGlz
LT50ZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgIHRleHR1cmUgPSB0ZXh0
dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4dHVyZS5n
ZXQoKSk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc2hv
dWxkUmVzZXQpCi0gICAgICAgIHRleHR1cmUtPnJlc2V0KG1fdGFyZ2V0UmVjdC5zaXplKCksIG1f
c3VyZmFjZS0+ZmxhZ3MoKSAmIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA/IEJpdG1h
cFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiAwKTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4
dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJm
YWNlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVm
ZmVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQotewotICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90YXJnZXRSZWN0
ID0gdGFyZ2V0UmVjdDsKLSAgICBtX3N1cmZhY2VPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdXJm
YWNlID0gYnVmZmVyOwotfQotCi12b2lkIExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKGlu
dCBpZCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgbV90aWxlcy5hZGQoaWQsIExheWVyQmFja2luZ1N0
b3JlVGlsZShzY2FsZSkpOwotICAgIG1fc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9pZCBMYXllckJh
Y2tpbmdTdG9yZTo6cmVtb3ZlVGlsZShpbnQgaWQpCi17Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmFw
cGVuZChpZCk7Ci19Ci0KLQotdm9pZCBMYXllckJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZShpbnQg
aWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKLXsKLSAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVu
ZCgpKTsKLSAgICBpdC0+c2Vjb25kLmluY3JlbWVudFJlcGFpbnRDb3VudCgpOwotICAgIGl0LT5z
ZWNvbmQuc2V0QmFja0J1ZmZlcih0YXJnZXRSZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBv
ZmZzZXQpOwotfQotCi1QYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IExheWVyQmFja2luZ1N0b3Jl
Ojp0ZXh0dXJlKCkgY29uc3QKLXsKLSAgICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVU
aWxlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hN
YXA8aW50LCBMYXllckJhY2tpbmdTdG9yZVRpbGU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiB0ZXh0dXJlID0gaXQtPnNlY29uZC50ZXh0dXJlKCk7Ci0gICAgICAgIGlmICh0ZXh0dXJl
KQotICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkU2hvd1RpbGVE
ZWJ1Z1Zpc3VhbHMoKQotewotI2lmIFBMQVRGT1JNKFFUKQotICAgIHJldHVybiAocWdldGVudigi
UVRfV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdfVklTVUFMUyIpID09ICIxIik7Ci0jZW5k
aWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTGF5ZXJCYWNraW5nU3RvcmU6OnBhaW50
VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0
UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwg
ZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKLXsKLSAgICBWZWN0b3I8VGV4dHVy
ZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMg
ZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KLSAg
ICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKLSAgICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7Ci0gICAgZm9yIChIYXNoTWFw
PGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUmIHRp
bGUgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0g
ICAgICAgICAgICB0aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVy
ZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFj
aXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAg
Ly8gV2Ugc2hvdyB0aGUgcHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBp
bnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVudC1zY2FsZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0
eSA8IDAuOTUgJiYgY292ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICB0aWxlc1RvUGFpbnQucHJlcGVuZCgmdGlsZSk7Ci0g
ICAgfQotCi0gICAgLy8gVE9ETzogV2hlbiB0aGUgVGV4dHVyZU1hcHBlciBtYWtlcyBhIGRpc3Rp
bmN0aW9uIGJldHdlZW4gc29tZSBlZGdlcyBleHBvc2VkIGFuZCBubyBlZGdlcwotICAgIC8vIGV4
cG9zZWQsIHRoZSB2YWx1ZSBwYXNzZWQgc2hvdWxkIGJlIGFuIGFjY3VyYXRlIHJlZmxlY3Rpb24g
b2YgdGhlIHRpbGUgc3Vic2V0IHRoYXQgd2UgYXJlCi0gICAgLy8gcGFzc2luZy4gRm9yIG5vdyB3
ZSBqdXN0ICJlc3RpbWF0ZSIgc2luY2UgTGF5ZXJCYWNraW5nU3RvcmUgZG9lc24ndCBrZWVwIGlu
Zm9ybWF0aW9uIGFib3V0Ci0gICAgLy8gdGhlIHRvdGFsIHRpbGVkIHN1cmZhY2UgcmVjdCBhdCB0
aGUgbW9tZW50LgotICAgIHVuc2lnbmVkIGVkZ2VzRXhwb3NlZCA9IG1fdGlsZXMuc2l6ZSgpID4g
MSA/IFRleHR1cmVNYXBwZXI6Ok5vRWRnZXMgOiBUZXh0dXJlTWFwcGVyOjpBbGxFZGdlczsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzVG9QYWludC5zaXplKCk7ICsraSkgewotICAg
ICAgICBUZXh0dXJlTWFwcGVyVGlsZSogdGlsZSA9IHRpbGVzVG9QYWludFtpXTsKLSAgICAgICAg
dGlsZS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCBlZGdl
c0V4cG9zZWQpOwotICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGREZWJ1ZyA9IHNob3VsZFNob3dU
aWxlRGVidWdWaXN1YWxzKCk7Ci0gICAgICAgIGlmICghc2hvdWxkRGVidWcpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3Qm9yZGVyKENvbG9yKDB4
RkYsIDAsIDApLCAyLCB0aWxlLT5yZWN0KCksIHRyYW5zZm9ybSk7Ci0gICAgICAgIHRleHR1cmVN
YXBwZXItPmRyYXdSZXBhaW50Q291bnRlcihzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZVRp
bGUqPih0aWxlKS0+cmVwYWludENvdW50KCksIDgsIHRpbGVzVG9QYWludFtpXS0+cmVjdCgpLmxv
Y2F0aW9uKCksIHRyYW5zZm9ybSk7Ci0gICAgfQotfQotCi12b2lkIExheWVyQmFja2luZ1N0b3Jl
Ojpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQotewot
ICAgIFZlY3RvcjxpbnQ+OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5kID0gbV90aWxlc1RvUmVt
b3ZlLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1Rv
UmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1vdmVFbmQ7ICsraXQpCi0gICAgICAgIG1f
dGlsZXMucmVtb3ZlKCppdCk7Ci0gICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBI
YXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBt
X3RpbGVzLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIExheWVyQmFja2luZ1N0b3JlVGls
ZT46Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkK
LSAgICAgICAgaXQtPnNlY29uZC5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy90ZXhtYXAvTGF5ZXJCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmE0ZjUxM2EwNWI4OTEzOTgwOTNlNjdhYmY1MTE5M2ExYTk2ZTUwNS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvdGV4bWFwL0xheWVyQmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSAr
MCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBM
YXllckJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIExheWVyQmFja2luZ1N0b3JlX2gKLQotI2lmIFVT
RShVSV9TSURFX0NPTVBPU0lUSU5HKQotCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU2hhcmVhYmxlU3VyZmFjZTsKLQot
Y2xhc3MgTGF5ZXJCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJUaWxlIHsKLXB1YmxpYzoKLSAgICBMYXllckJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUg
PSAxKQotICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKFdlYkNvcmU6OkZsb2F0UmVjdCgpKQot
ICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAgICAgICwgbV9yZXBhaW50Q291bnQoMCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZTsgfQotICAgIGlubGluZSB2b2lkIGluY3JlbWVudFJlcGFpbnRDb3VudCgpIHsgKyttX3Jl
cGFpbnRDb3VudDsgfQotICAgIGlubGluZSBpbnQgcmVwYWludENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9yZXBhaW50Q291bnQ7IH0KLSAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZVN1cmZhY2U+
IGJ1ZmZlciwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlU3VyZmFjZT4gbV9zdXJmYWNlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9z
b3VyY2VSZWN0OwotICAgIFdlYkNvcmU6OkludFJlY3QgbV90YXJnZXRSZWN0OwotICAgIFdlYkNv
cmU6OkludFBvaW50IG1fc3VyZmFjZU9mZnNldDsKLSAgICBmbG9hdCBtX3NjYWxlOwotICAgIGlu
dCBtX3JlcGFpbnRDb3VudDsKLX07Ci0KLWNsYXNzIExheWVyQmFja2luZ1N0b3JlIDogcHVibGlj
IFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgewotcHVibGljOgotICAgIHZvaWQg
Y3JlYXRlVGlsZShpbnQsIGZsb2F0KTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoaW50KTsKLSAgICB2
b2lkIHVwZGF0ZVRpbGUoaW50LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlU3VyZmFjZT4sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllckJhY2tpbmdTdG9yZSk7IH0KLSAgICB2
b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcios
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgZmxvYXQsIFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsKLQotcHJpdmF0ZToKLSAg
ICBMYXllckJhY2tpbmdTdG9yZSgpCi0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAg
ICBIYXNoTWFwPGludCwgTGF5ZXJCYWNraW5nU3RvcmVUaWxlPiBtX3RpbGVzOwotICAgIFZlY3Rv
cjxpbnQ+IG1fdGlsZXNUb1JlbW92ZTsKLSAgICBmbG9hdCBtX3NjYWxlOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVyQmFja2luZ1N0b3JlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkKaW5kZXggMTdkNTQ5M2IwYWIzYWU5NDg0YzRiYWIwOGZkN2Y4YWI1M2JhY2Y3
NC4uNGY0OGM3YTQ0ZjYxN2Y3NTQ0YTRiNjdhMGU5ZjgxMDhmZmQ4Mzk2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5w
cmkKQEAgLTI2LDYgKzI2LDcgQEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkU09VUkNFX0RJUi9V
SVByb2Nlc3MvQVBJL2NwcC9xdCBcCiAgICAgJCRTT1VSQ0VfRElSL1VJUHJvY2Vzcy9BUEkvcXQg
XAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24gXAorICAgICQkU09V
UkNFX0RJUi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyBcCiAgICAgJCRTT1VSQ0VfRElS
L1VJUHJvY2Vzcy9Eb3dubG9hZHMgXAogICAgICQkU09VUkNFX0RJUi9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyIFwKICAgICAkJFNPVVJDRV9ESVIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9x
dCBcCkBAIC01OCw3ICs1OSw3IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJFNPVVJDRV9ESVIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydCBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvcXQgXAogICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2Ug
XAotICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgXAorICAgICQkU09VUkNFX0RJUi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYlByb2Nlc3MvcXQgXAogICAgICQkU09VUkNFX0RJ
Ui9QbHVnaW5Qcm9jZXNzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAzYWY1OTY2MjZi
MThlNDIyZjBkMTRjMGYwMGI0NDY2YmNhNDMzMWEwLi5jN2ZjOWE3YjczMTkyY2JlOWYzMmVjYzg4
NzFmMzBjYzMwOTI0ZjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC02MzgsNyArNjM4
LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiB2b2lkIFdl
YkNocm9tZUNsaWVudDo6c2NoZWR1bGVBbmltYXRpb24oKQogewotI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBtX3BhZ2UtPmRy
YXdpbmdBcmVhKCktPmxheWVyVHJlZUhvc3QoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKICNlbmRp
ZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDg5ZTc0YWNhNjA2Y2YwMDJmYWNiOTU1YzM1N2Nk
YmRmZWQ2YzJhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
QEAgLTAsMCArMSw3NTggQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisKKyNpbmNsdWRlICJCYWNraW5n
U3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8V2ViTGF5
ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4mIGxheWVyQnlJRE1hcCgpCit7CisgICAg
c3RhdGljIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gZ2xv
YmFsTWFwOworICAgIHJldHVybiBnbG9iYWxNYXA7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpsYXllckJ5SUQoV2ViS2l0OjpXZWJMYXll
cklEIGlkKQoreworICAgIEhhc2hNYXA8V2ViTGF5ZXJJRCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKj4mIHRhYmxlID0gbGF5ZXJCeUlETWFwKCk7CisgICAgSGFzaE1hcDxXZWJMYXllcklELCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSB0YWJsZS5maW5kKGlkKTsK
KyAgICBpZiAoaXQgPT0gdGFibGUuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBpdC0+c2Vjb25kOworfQorCitzdGF0aWMgV2ViTGF5ZXJJRCB0b1dlYkxheWVySUQoR3JhcGhp
Y3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyID8gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQoreworICAgIG1fc2hvdWxkU3luY0xheWVyU3Rh
dGUgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5
bmNSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRp
ZENoYW5nZUNoaWxkcmVuKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRo
aXMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQoreworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMg
PSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNS
ZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghdHJhbnNmb3JtKCku
aXNBZmZpbmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ld
KS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkp
CisgICAgICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0
U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKworQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCog
Y2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisgICAgLCBtX21hc2tUYXJnZXQo
MCkKKyAgICAsIG1faW5VcGRhdGVNb2RlKGZhbHNlKQorICAgICwgbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwg
bV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNl
KQorICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCgwKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXIoMCkKK3sKKyAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5
ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklEKys7CisgICAgbGF5ZXJCeUlETWFwKCku
YWRkKGlkKCksIHRoaXMpOworfQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIoKQoreworICAgIGxheWVyQnlJRE1hcCgpLnJlbW92ZShpZCgpKTsK
KworICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCkgeworICAgICAgICBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQtPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICB3aWxsQmVEZXN0cm95ZWQoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OndpbGxCZURlc3Ryb3llZCgpCit7
CisgICAgR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXll
cio+JiBjaGlsZHJlbikKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRy
ZW4oY2hpbGRyZW4pOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogY2hpbGQgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihj
aGlsZHJlbltpXSk7CisgICAgICAgIGNoaWxkLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOworICAgICAgICBjaGlsZC0+
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIH0KKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQobGF5ZXIpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50KTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBp
bnQgaW5kZXgpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBp
bmRleCk7CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5zZXRDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQp
OworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+ZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGlj
c0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5
ZXIsIHNpYmxpbmcpOworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+c2V0
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50KTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwg
R3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJl
bG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXll
ciktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllckNsaWVudCk7CisgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5k
aWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKworYm9v
bCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBv
bGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCit7CisgICAgYm9vbCBvayA9IEdyYXBo
aWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpOworICAgIGlmICghb2sp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworICAgIHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG9sZENoaWxkKS0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG5ld0NoaWxkKS0+c2V0Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50KG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KTsK
KyAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVy
U3RhdGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIHBhcmVudExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkp
KQorICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICBHcmFwaGlj
c0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50JiBwKQoreworICAgIGlmIChwb3NpdGlvbigpID09IHApCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOworICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQ
b2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApCit7CisgICAgaWYgKGFuY2hvclBvaW50KCkgPT0g
cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQo
cCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIGlmICh0aGlz
LT5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6
c2V0U2l6ZShzaXplKTsKKyAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKyAgICBpZiAobWFza0xheWVy
KCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgp
ID09IHQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9y
bSh0KTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFByZXNlcnZlczNEKGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsK
KyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMo
KSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0Jv
dW5kcyhiKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3ND
b250ZW50KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERy
YXdzQ29udGVudChiKTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7Cisg
ICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJsZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYik7CisKKyAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c09wYXF1ZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNPcGFxdWUoYik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikK
K3sKKyAgICBpZiAoYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9w
YWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHko
b3BhY2l0eSk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlz
cGxheSgpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IG1faW1hZ2U7CisgICAgc2V0Q29u
dGVudHNUb0ltYWdlKDApOworICAgIHNldENvbnRlbnRzVG9JbWFnZShpbWFnZS5nZXQoKSk7Cisg
ICAgbV9jYW52YXNOZWVkc0Rpc3BsYXkgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAg
ICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcikKK3sKKyAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUxheWVy
OworICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisg
ICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVy
cyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQoreworICAgIGlmIChmaWx0ZXJz
KCkgPT0gbmV3RmlsdGVycykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGlkQ2hhbmdlRmls
dGVycygpOworICAgIHJldHVybiBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMp
OworfQorI2VuZGlmCisKKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgaWYgKGltYWdlID09IG1faW1hZ2UpCisg
ICAgICAgIHJldHVybjsKKyAgICBpbnQ2NF90IG5ld0lEID0gMDsKKyAgICBpZiAobV9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpIHsKKyAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGlu
IGNhc2UgdGhpcyBpcyB0aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lp
bmcgYW5kIHJlY3JlYXRpbmcgdGhlIGltYWdlLgorICAgICAgICBuZXdJRCA9IG1fQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKGltYWdlKTsKKyAg
ICAgICAgbV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnJlbGVhc2VJbWFnZUJhY2tp
bmdTdG9yZShtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKyAgICAgICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOworICAgICAgICBpZiAobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3Rv
cmVJRCAmJiBuZXdJRCA9PSBtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIG1fQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRoZXJlIHNob3VsZCBiZSBubyBiYWNr
aW5nIHN0b3JlIElELgorICAgICAgICBBU1NFUlQoIW1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpOworICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgfQorCisgICAgbV9s
YXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lEOworICAgIG1faW1hZ2UgPSBpbWFn
ZTsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtYXNrTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKKworICAgIGlmICgh
bGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgPSB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllcik7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLT5zZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQobV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci0+c2V0TWFz
a1RhcmdldCh0aGlzKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXItPmRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQoreworICAgIGlmIChsYXllciA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGxheWVyKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihsYXllciktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChtX0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCk7CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVk
QnlMYXllcihsYXllcik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKK3sKKyAgICBzZXROZWVk
c0Rpc3BsYXlJblJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKHNpemUoKS53
aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9
CisKK1dlYkxheWVySUQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faWQ7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1h
c2tMYXllcigpKSkKKyAgICAgICAgbWFzay0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7CisKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiByZXBsaWNhID0g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQorICAgICAgICByZXBs
aWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHN5
bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ld
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKK3sK
KyAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAgbV9z
aG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gY2hpbGRJ
RHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9XZWJMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKwor
ICAgIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJDaGlsZHJlbiht
X2lkLCBjaGlsZElEcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQoreworICAgIGlmICghbV9zaG91bGRT
eW5jRmlsdGVycykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBm
YWxzZTsKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0xheWVyRmls
dGVycyhtX2lkLCBmaWx0ZXJzKCkpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXll
clN0YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZh
bHNlOworICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgp
OworCisgICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludCgpOworICAgIG1f
bGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIG1f
bGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBt
X2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9sYXll
ckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7CisgICAgbV9sYXllckluZm8uZHJh
d3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNWaXNp
YmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAgbV9sYXllckluZm8ubWFzayA9IHRvV2Vi
TGF5ZXJJRChtYXNrTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8ubWFza3NUb0JvdW5kcyA9IG1h
c2tzVG9Cb3VuZHMoKTsKKyAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3BhY2l0eSgpOworICAg
IG1fbGF5ZXJJbmZvLnBhcmVudCA9IHRvV2ViTGF5ZXJJRChwYXJlbnQoKSk7CisgICAgbV9sYXll
ckluZm8ucG9zID0gcG9zaXRpb24oKTsKKyAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHBy
ZXNlcnZlczNEKCk7CisgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5ZXJJRChyZXBs
aWNhTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKKyAgICBtX2xheWVy
SW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudC0+c3luY0xheWVyU3RhdGUobV9pZCwgbV9sYXllckluZm8pOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCit7CisgICAgaWYgKCFtX2Nh
bnZhc05lZWRzRGlzcGxheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgIHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuID0gbV9jYW52YXNQbGF0Zm9ybUxh
eWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudC0+c3luY0NhbnZhcyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXpl
KCkuaGVpZ2h0KCkpLCBncmFwaGljc1N1cmZhY2VUb2tlbik7CisjZW5kaWYKKyAgICBtX2NhbnZh
c05lZWRzRGlzcGxheSA9IGZhbHNlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCkKKyAg
ICAgICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG1fQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LT5hZG9wdEltYWdlQmFja2luZ1N0b3JlKG1faW1hZ2UuZ2V0KCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVG
b3JUaGlzTGF5ZXJPbmx5KCkKK3sKKyAgICAvLyBUaGUgcmVtb3RlIGltYWdlIG1pZ2h0IGhhdmUg
YmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCisgICAgZW5zdXJlSW1hZ2VCYWNr
aW5nU3RvcmUoKTsKKyAgICBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHN5
bmNDaGlsZHJlbigpOworICAgIHN5bmNMYXllclN0YXRlKCk7CisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB1cGRhdGVDb250ZW50QnVmZmVy
cygpOworICAgIHN5bmNDYW52YXMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCit7CisgICAgbV9sYXll
ckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0
VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQorewor
ICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCh0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCit7Cisg
ICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwor
fQorCitmbG9hdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2Nh
bGUoKQoreworICAgIHJldHVybiBzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpID8gbV9jb250
ZW50c1NjYWxlIDogMTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVz
dENvbnRlbnRzU2NhbGUoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlIHx8IG1fbWFpbkJhY2tpbmdTdG9y
ZS0+Y29udGVudHNTY2FsZSgpID09IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gQmV0d2VlbiBjcmVhdGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUg
YW5kIHBhaW50aW5nIHRoZSBjb250ZW50LAorICAgIC8vIHdlIGRvIG5vdCB3YW50IHRvIGRyb3Ag
dGhlIHByZXZpb3VzIG9uZSBhcyB0aGF0IG1pZ2h0IHJlc3VsdCBpbgorICAgIC8vIGJyaWVmbHkg
c2VlaW5nIGZsaWNrZXJpbmcgYXMgdGhlIG9sZCB0aWxlcyBtYXkgYmUgZHJvcHBlZCBiZWZvcmUK
KyAgICAvLyBzb21ldGhpbmcgcmVwbGFjZXMgdGhlbS4KKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0
b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKKworICAgIC8vIE5vIHJlYXNvbiB0
byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlzaWJsZSBhcmVhcy4K
KyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKTsK
KworICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUg
PSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFj
a2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0
c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENv
bnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250
ZXh0LCByZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCit7
Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVVw
ZGF0ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5VcGRhdGVNb2RlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xp
ZW50LT5sYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKTsKK30KKworSW50UmVjdCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKK3sKKyAg
ICByZXR1cm4gSW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsK
K30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZFVzZVRpbGVkQmFja2lu
Z1N0b3JlKCkKK3sKKyAgICByZXR1cm4gIXNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5z
Zm9ybXMoKTsKK30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghc2hvdWxkVXNlVGlsZWRCYWNraW5n
U3RvcmUoKSkKKyAgICAgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCk7
CisKKyAgICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMgYXJlIG5vdCB2aXNpYmxlLgorICAgIGlm
ICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzSW52ZXJ0aWJsZSgpKQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworCisgICAgLy8gUmV0dXJuIGEgcHJvamVjdGlvbiBvZiB0aGUgdmlz
aWJsZSByZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRvIHRoZSBsYXllcidzIHBsYW5lIChs
YXllciBjb29yZGluYXRlcykuCisgICAgLy8gVGhlIHJlc3VsdGluZyBxdWFkIG1pZ2h0IGJlIHNx
dWV3ZWQgYW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGlzIHF1
YWQsCisgICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRoZXIgdGhhbiB0aGUgcmVhbCB2aXNp
YmxlIGFyZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZpZWQgYnkgdGhlIGNvdmVyIHJlY3Qg
bXVsdGlwbGllcikuCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9sYXllclRyYW5zZm9y
bS5jb21iaW5lZCgpLmludmVyc2UoKS5jbGFtcGVkQm91bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0
UXVhZChGbG9hdFJlY3QobV9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPnZpc2libGVD
b250ZW50c1JlY3QoKSkpKSk7Cit9CisKK0NvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBj
b250ZW50c09wYXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OworfQor
CitQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwg
U2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUsIFdlYkNvcmU6OkludFBvaW50JiBvZmZz
ZXQpCit7CisgICAgcmV0dXJuIG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdp
bkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1
cGRhdGVJbmZvLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8sIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJDbGllbnQtPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0
YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRp
bGUoaW50IHRpbGVJRCkKK3sKKyAgICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudC0+
cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkp
IHsKKyAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgICAgIG1fcHJldmlv
dXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
aW5VcGRhdGVNb2RlID0gdHJ1ZTsKKyAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChy
ZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2luZyBzdG9yZSwgb25jZSB3ZQorICAgIC8vIGhh
dmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUgcmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0
aGUgVUkgcHJvY2Vzcy4KKyAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgY3Jl
YXRlQmFja2luZ1N0b3JlKCk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT51cGRhdGVUaWxlQnVm
ZmVycygpOworICAgIG1faW5VcGRhdGVNb2RlID0gZmFsc2U7CisKKyAgICAvLyBUaGUgcHJldmlv
dXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdl
ZW4KKyAgICAvLyByZW1vdmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBu
ZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBw
YWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlLT52aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQorICAgICAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVh
cigpOworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKKworICAgIGlmIChtX2xh
eWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKSB7CisgICAgICAgIG1fQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyQ2xpZW50LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1h
Z2VCYWNraW5nU3RvcmVJRCk7CisgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3Jl
SUQgPSAwOworICAgIH0KKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFu
Z2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKG1fQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50ID09IGNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxp
Y2FMYXllcigpKSkKKyAgICAgICAgcmVwbGljYS0+c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50KGNsaWVudCk7CisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKKyAgICAgICAgbWFzay0+
c2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KGNsaWVudCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcih0aGlz
LT5jaGlsZHJlbigpW2ldKTsKKyAgICAgICAgbGF5ZXItPnNldENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudChjbGllbnQpOworICAgIH0KKworICAgIC8vIFdlIGhhdmUgdG8gcmVsZWFzZSBy
ZXNvdXJjZXMgb24gdGhlIFVJIHByb2Nlc3MgaGVyZSBpZiB0aGUgcmVtb3RlIGNsaWVudCBoYXMg
Y2hhbmdlZCBvciBpcyByZW1vdmVkLgorICAgIGlmIChtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCkgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICAgICAgbV9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQtPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAg
ICBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCA9IGNsaWVudDsKKyAgICBpZiAoY2xp
ZW50KQorICAgICAgICBjbGllbnQtPmF0dGFjaExheWVyKHRoaXMpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0VmlzaWJsZVJlY3QoKQoreworICAgIGlmIChtX21h
aW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGls
ZXNJZk5lZWRlZCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0
ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQoreworICAgIGlmICghbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Qg
PSBmYWxzZTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKHRyYW5zZm9y
bSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOworICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQoKSk7CisgICAgbV9s
YXllclRyYW5zZm9ybS5zZXRTaXplKHNpemUoKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRG
bGF0dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldENoaWxk
cmVuVHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0u
Y29tYmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihw
YXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWRGb3JDaGlsZHJlbigpIDogVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICAvLyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwg
YmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0LgorICAgIGFkanVzdFZpc2li
bGVSZWN0KCk7CisgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOworfQorCitzdGF0aWMgUGFzc093
blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6aW5pdEZhY3RvcnkoKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEdyYXBoaWNz
TGF5ZXJGYWN0b3J5KGNyZWF0ZUNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik7Cit9CisKK2Jvb2wg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFu
c2Zvcm1zKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0FmZmlu
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworfQor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlMGM1N2RkNTNlNDRjZGQ4NTVkMDI4MTRiMzVhODVh
ZWEzMTA0ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAt
MCwwICsxLDIwOCBAQAorICAgIC8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKKyNkZWZpbmUgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyX2gKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorI2luY2x1
ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVGls
ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgor
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5o
IgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOworfQorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVy
SUQsIGludCB0aWxlSUQpID0gMDsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNp
YmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVU
aWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQ2NF90IGFkb3B0
SW1hZ2VCYWNraW5nU3RvcmUoV2ViQ29yZTo6SW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5mbyYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViTGF5ZXJJRCwgY29uc3QgVmVjdG9y
PFdlYkxheWVySUQ+JikgPSAwOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zJikgPSAwOworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgdmlydHVhbCB2
b2lkIHN5bmNDYW52YXMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFz
U2l6ZSwgdWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4pID0gMDsKKyNlbmRpZgorICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkg
PSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFw
OjpGbGFncywgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9
IDA7Cit9OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyCisgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1Ymxp
YzoKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwor
ICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpOworCisgICAgLy8gUmVpbXBs
ZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmguCisgICAgYm9vbCBzZXRDaGlsZHJlbihj
b25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7CisgICAgdm9pZCBhZGRDaGlsZChHcmFwaGlj
c0xheWVyKik7CisgICAgdm9pZCBhZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciosIGludCk7
CisgICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7
CisgICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKik7
CisgICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKTsK
KyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQz
RCYpOworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIHNldFBy
ZXNlcnZlczNEKGJvb2wpOworICAgIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKTsKKyAgICB2
b2lkIHNldERyYXdzQ29udGVudChib29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShi
b29sKTsKKyAgICB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpOworICAgIHZvaWQgc2V0QmFj
a2ZhY2VWaXNpYmlsaXR5KGJvb2wpOworICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCk7CisgICAg
dm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKik7CisgICAgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3Jt
TGF5ZXIqKTsKKyAgICB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9p
ZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBzZXROZWVk
c0Rpc3BsYXkoKTsKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCk7CisgICAgdm9pZCBzZXRD
b250ZW50c1NjYWxlKGZsb2F0KTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWpl
Y3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29t
cG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYK
KworICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOworCisgICAgV2ViS2l0OjpXZWJMYXllcklE
IGlkKCkgY29uc3Q7CisgICAgc3RhdGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXJC
eUlEKFdlYktpdDo6V2ViTGF5ZXJJRCk7CisgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOworICAg
IEltYWdlKiBpbWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKworICAgIGJvb2wgZml4
ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3BvcnQ7IH0KKyAgICB2
b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQg
PSBpc0ZpeGVkOyB9CisKKyAgICBHcmFwaGljc0xheWVyKiBtYXNrVGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrVGFyZ2V0OyB9CisgICAgdm9pZCBzZXRNYXNrVGFyZ2V0KEdyYXBoaWNzTGF5
ZXIqIGxheWVyKSB7IG1fbWFza1RhcmdldCA9IGxheWVyOyB9CisKKyAgICBzdGF0aWMgdm9pZCBp
bml0RmFjdG9yeSgpOworCisgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCk7CisgICAgdmlydHVhbCB2b2lk
IHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3Rv
cjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpOworICAgIHZpcnR1YWwgYm9vbCB0aWxlZEJhY2tpbmdT
dG9yZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KCk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2lu
Z1N0b3JlVmlzaWJsZVJlY3QoKTsKKyAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3Jl
QmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlN1
cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGUoaW50IHRpbGVJRCk7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJL
aXQ6OlNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6OkludFBvaW50Jik7CisKKyAg
ICB2b2lkIHNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudChXZWJLaXQ6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCopOworICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7CisgICAg
dm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lk
IHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB2b2lkIHN5bmNDYW52YXMoKTsKKyAgICB2b2lk
IGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7CisKKyAgICB2b2lkIGFkanVzdFZpc2libGVSZWN0
KCk7CisgICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgV2Vi
S2l0OjpXZWJMYXllcklEIG1faWQ7CisgICAgV2ViS2l0OjpXZWJMYXllckluZm8gbV9sYXllcklu
Zm87CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIEdyYXBoaWNzTGF5ZXIqIG1fbWFz
a1RhcmdldDsKKyAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0OworICAgIEdyYXBoaWNz
TGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKKyAgICBib29sIG1faW5VcGRhdGVNb2Rl
IDogMTsKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7CisgICAgYm9vbCBt
X3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46
IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOworICAgIGJvb2wgbV9maXhlZFRv
Vmlld3BvcnQgOiAxOworICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOworCisgICAg
dm9pZCBub3RpZnlDaGFuZ2UoKTsKKyAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7CisgICAg
dm9pZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJlbigp
OworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsK
KyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKworICAgIGJvb2wgc2Vs
Zk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOworICAgIGJvb2wgc2hvdWxkVXNl
VGlsZWRCYWNraW5nU3RvcmUoKTsKKyAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKyAg
ICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgdm9pZCBzeW5jTGF5
ZXJQYXJhbWV0ZXJzKCk7CisgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwor
ICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKKworICAgIFdlYktpdDo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBtX0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dDsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdT
dG9yZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNC
YWNraW5nU3RvcmU7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIFBsYXRmb3JtTGF5
ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKK307CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9CisjZW5k
aWYKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9ICmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZFRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTYyNDRlMmQ5
ZGQwZmM5NDE2ODEyZGM2ZGY2Zjc0NTAwNjZmZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRUaWxlLmNwcApAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorCisjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitDb29yZGluYXRlZFRpbGU6OkNvb3Jk
aW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3Rv
cmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkK
KyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRC
YWNraW5nU3RvcmUpCisgICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAgLCBt
X3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRp
bmF0ZSkpCisgICAgLCBtX0lEKDApCisgICAgLCBtX2RpcnR5UmVjdChtX3JlY3QpCit7Cit9CisK
K0Nvb3JkaW5hdGVkVGlsZTo6fkNvb3JkaW5hdGVkVGlsZSgpCit7CisgICAgaWYgKG1fSUQpCisg
ICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQpOworfQorCitib29sIENvb3JkaW5hdGVk
VGlsZTo6aXNEaXJ0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24o
ZGlydHlSZWN0LCBtX3JlY3QpOworICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Cit9
CisKK1ZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQor
eworICAgIGlmICghaXNEaXJ0eSgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7
CisKKyAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUo
bV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUsIHVwZGF0ZUluZm8u
c3VyZmFjZU9mZnNldCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAgICAgIHJldHVy
biBWZWN0b3I8SW50UmVjdD4oKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9k
aXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGls
ZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOworICAgIG1fdGlsZWRCYWNraW5nU3Rv
cmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQo
KSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOworCisg
ICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51
cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKKyAgICB1cGRhdGVJbmZv
LnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOworICAg
IGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CisKKyAgICBzdGF0aWMgaW50IGlkID0gMDsKKyAg
ICBpZiAoIW1fSUQpIHsKKyAgICAgICAgbV9JRCA9ICsraWQ7CisgICAgICAgIG1fY2xpZW50LT5j
cmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7CisgICAgfSBlbHNlCisgICAgICAg
IG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7CisKKyAgICBt
X2RpcnR5UmVjdCA9IEludFJlY3QoKTsKKyAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQoreworICAg
IC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKworYm9vbCBDb29y
ZGluYXRlZFRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFtX0lE
OworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUp
Cit7CisgICAgbV9yZWN0ID0gSW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7Cisg
ICAgbV9kaXJ0eVJlY3QgPSBtX3JlY3Q7Cit9CisKK0Nvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OkNv
b3JkaW5hdGVkVGlsZUJhY2tlbmQoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gQ29v
cmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9y
ZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmIHRp
bGVDb29yZGluYXRlKQoreworICAgIHJldHVybiBDb29yZGluYXRlZFRpbGU6OmNyZWF0ZShtX2Ns
aWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZFRpbGVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCit7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZFRpbGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0ZDExMzRm
MDQyZTlmNTJlMDNmY2I0MTJjMDNkMzM3YTY0NTc5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRpbGUuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb29yZGluYXRlZFRpbGVfaAorI2RlZmluZSBDb29yZGluYXRlZFRpbGVfaAorCisj
aWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJTaGFyZWFibGVTdXJmYWNl
LmgiCisjaW5jbHVkZSAiVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisj
aW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEltYWdlQnVmZmVyOworY2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQ7CitjbGFzcyBTdXJmYWNlVXBk
YXRlSW5mbzsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVibGljIFdlYkNvcmU6OlRpbGUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShDb29yZGluYXRl
ZFRpbGVDbGllbnQqIGNsaWVudCwgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFj
a2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENvb3JkaW5hdGVkVGlsZShjbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxl
Q29vcmRpbmF0ZSkpOyB9CisgICAgfkNvb3JkaW5hdGVkVGlsZSgpOworCisgICAgYm9vbCBpc0Rp
cnR5KCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gdXBkYXRlQmFja0J1ZmZlcigpOworICAg
IHZvaWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CisgICAgYm9vbCBpc1JlYWR5VG9QYWludCgp
IGNvbnN0OworICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworCisgICAgY29uc3QgQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQorICAgIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHJlc2l6ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxlKENv
b3JkaW5hdGVkVGlsZUNsaWVudCosIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3Qg
Q29vcmRpbmF0ZSYpOworCisgICAgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAg
ICBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogbV90aWxlZEJhY2tpbmdTdG9yZTsKKyAgICBD
b29yZGluYXRlIG1fY29vcmRpbmF0ZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcmVjdDsKKwor
ICAgIGludCBtX0lEOworICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7CisKKyAgICBP
d25QdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fbG9jYWxCdWZmZXI7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZFRpbGVDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVk
VGlsZUNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKGludCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVRpbGUoaW50IHRpbGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgU2hhcmVhYmxlU3VyZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9
IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFRpbGVCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiBjcmVhdGUoQ29vcmRpbmF0ZWRU
aWxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZFRpbGVC
YWNrZW5kKGNsaWVudCkpOyB9CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpUaWxlPiBjcmVhdGVU
aWxlKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgV2ViQ29yZTo6VGlsZTo6Q29v
cmRpbmF0ZSYpOworICAgIHZvaWQgcGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICBD
b29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCopOworICAgIENvb3Jk
aW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNlbmRpZiAvLyBDb29y
ZGluYXRlZFRpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzViN2Y1YzQwMzZkOGVhYWQxYTAzMzcwOGM4M2E4
YjExYTVkODFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCkBAIC0w
LDAgKzEsNjA5IEBACisgICAgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgorCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAi
U3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
KyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJCYWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRp
bmdzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5
ZXJUcmVlQ29vcmRpbmF0b3Iod2ViUGFnZSkpOworfQorCitMYXllclRyZWVDb29yZGluYXRvcjo6
fkxheWVyVHJlZUNvb3JkaW5hdG9yKCkKK3sKKyAgICAvLyBQcmV2ZW50IHNldENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20gbW9kaWZ5aW5nIHRo
ZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVnaXN0ZXJlZExheWVy
cy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVu
ZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgKCppdCktPnNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKTsK
K30KKworTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2Uq
IHdlYlBhZ2UpCisgICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCisgICAgLCBtX25vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKKyAgICAsIG1faXNWYWxpZCh0cnVlKQorICAg
ICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNl
KQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBt
X3Nob3VsZFN5bmNSb290TGF5ZXIodHJ1ZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMs
ICZMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCisgICAgLCBtX2xh
eWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQoreworICAgIC8vIENyZWF0ZSBhIHJvb3Qg
bGF5ZXIuCisgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7Cisg
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgd2ViUm9vdExheWVyLT5zZXRS
b290TGF5ZXIodHJ1ZSk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1l
KCJMYXllclRyZWVDb29yZGluYXRvciByb290IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RM
YXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZSht
X3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVDb250ZXh0LndlYkxheWVySUQgPSB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcih3ZWJSb290TGF5ZXIpLT5pZCgpOworCisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMpOwor
ICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9y
IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKKyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsKKworICAgIGlm
IChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5
TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCBsYXllckZs
dXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQg
PT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7CisKKyAgICBpZiAo
bV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUxheWVyRmx1
c2goKQoreworICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZs
dXNoVGltZXIuc3RvcCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRTaG91
bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hl
ZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNo
ID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOworfQorCit2b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1fd2ViUGFnZS0+
ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7CisKKyAgICAvLyBBZGQgdGhlIGFjY2VsZXJh
dGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgorICAgIGlmIChncmFwaGljc0xheWVyKQorICAgICAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNzTGF5ZXIpOwor
fQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9y
b290TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpCit7CisgICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVj
dCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludCgpCit7Cisg
ICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBp
biB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBhIFVJUHJvY2VzcyB0byByZXBseSBu
aWNlbHkuCisgICAgLy8gSW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWlu
dC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxi
YWNrcyBiZWluZyBleGVjdXRlZC4KKyAgICBzeW5jRGlzcGxheVN0YXRlKCk7CisKKyAgICAvLyBX
ZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lzZSB0aGUgZm9yY2VkIHBh
aW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgorICAgIC8vIFRoaXMgaXMg
YWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
KyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQor
eworICAgIGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhl
IG5ld1NpemUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQg
YSBzZXROZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9z
ZWQgYXJlYXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUo
bmV3U2l6ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7
CisgICAgICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdT
aXplLmhlaWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndp
ZHRoKCksIDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7Cisg
ICAgfQorCisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAg
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChG
bG9hdFJlY3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhl
aWdodCgpIC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXll
cikKKyAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRp
ZEluc3RhbGxQYWdlT3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpkaWRVbmluc3RhbGxQYWdlT3ZlcmxheSgpCit7CisgICAgZGVzdHJveVBhZ2VPdmVybGF5TGF5
ZXIoKTsKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0UGFnZU92ZXJs
YXlPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIp
OworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZsdXNoUGVu
ZGluZ0xheWVyQ2hhbmdlcygpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBmYWxzZTsKKyAg
ICBib29sIGRpZFN5bmMgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgbV9y
b290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAg
aWYgKG1fc2hvdWxkU3luY1Jvb3RMYXllcikgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVy
KHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOwor
ICAgICAgICBtX3Nob3VsZFN5bmNSb290TGF5ZXIgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IW1fc2hvdWxkU3luY0ZyYW1lKQorICAgICAgICByZXR1cm4gZGlkU3luYzsKKworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVy
RnJhbWUoKSk7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKyAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllclN0YXRlKFdlYkxheWVySUQgaWQsIGNvbnN0IFdlYkxh
eWVySW5mbyYgaW5mbykKK3sKKyAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGUpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3Qu
bG9jYXRpb24oKSkpOworICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9
IGZhbHNlOworICAgIH0KKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8V2ViTGF5
ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENv
bXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKK30KKwordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c3luY0NhbnZhcyhXZWJMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBj
YW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZhY2VUb2tlbikKK3sKKyAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpTeW5jQ2FudmFzKGlkLCBjYW52YXNTaXplLCBncmFwaGljc1N1
cmZhY2VUb2tlbikpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklEIGlkLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6YXR0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVnaXN0ZXJlZExheWVycy5jb250YWlu
cyhsYXllcikpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOworCisgICAgbGF5
ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAgICBsYXllci0+YWRqdXN0
VmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5
ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBtX3JlZ2lzdGVyZWRM
YXllcnMucmVtb3ZlKGxheWVyKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZWxl
dGVDb21wb3NpdGluZ0xheWVyKGxheWVyLT5pZCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0
ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQorewor
ICAgIC8vIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBtYXRjaCB0aGUgY29uZGl0aW9ucyBpbiBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBS
ZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOworICAg
IGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+aXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgfHwgcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBv
c2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFy
ZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xh
eWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30K
Kworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5
ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYo
cmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAg
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENo
aWxkKCkpOworICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkp
OworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQorewor
ICAgIGlmICghbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBhZ2Ut
PmNvcmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBv
c2l0aW9uRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2ViUGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzRml4ZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFt
ZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsK
KyAgICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5m
aXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJv
b3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmIChtX2lzU3VzcGVu
ZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3lu
Y0Rpc3BsYXlTdGF0ZSgpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgZGlkUGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c3luY0Rpc3BsYXlTdGF0ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
bnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4
ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252
ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZgorCisgICAg
bV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKG1fbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7CisgICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdB
cmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5
ZXJzKCk7CisgICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7
CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJG
aXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQoreworICAgIHBlcmZvcm1TY2hlZHVs
ZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKQoreworICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKKwor
ICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVD
b29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
KyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOworfQorCitpbnQ2NF90IExheWVyVHJl
ZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKK3sKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBp
bnQ2NF90IGtleSA9IDA7CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBRSW1hZ2UqIG5hdGl2ZUlt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICBpZiAoIW5h
dGl2ZUltYWdlKQorICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7CisKKyAgICBrZXkg
PSBuYXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKKyNlbmRpZgorCisgICAgSGFzaE1hcDxpbnQ2NF90
LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3VudHMu
ZmluZChrZXkpOworCisgICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZD
b3VudHMuZW5kKCkpIHsKKyAgICAgICAgKysoaXQtPnNlY29uZCk7CisgICAgICAgIHJldHVybiBr
ZXk7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJyZW50
RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkpOwor
ICAgIHsKKyAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBvaW50
Ojp6ZXJvKCkpOworICAgIH0KKworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsK
KyAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVm
Q291bnRzLmFkZChrZXksIDEpOworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKK3sKKyAg
ICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuOworICAgIEhhc2hNYXA8aW50NjRfdCwgaW50Pjo6
aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQoa2V5
KTsKKyAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXQtPnNlY29uZC0tOworCisgICAgaWYgKGl0LT5z
ZWNvbmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMucmVtb3ZlKGl0KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShrZXkp
KTsKK30KKworCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFy
dGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3sKK30KKwor
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKQoreworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpw
YWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qp
Cit7CisgICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
KSB7CisgICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVj
dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBt
X3BhZ2VPdmVybGF5TGF5ZXIpIHsKKyAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3Bh
cmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVp
ciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5j
bGVhclJlY3QoY2xpcFJlY3QpOworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShn
cmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
Ym9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Cit9CisKK2Jvb2wgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5n
cygpLT5zaG93UmVwYWludENvdW50ZXIoKTsKK30KKworYm9vbCBMYXllclRyZWVIb3N0OjpzdXBw
b3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwg
aW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwgdXBk
YXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKFdl
YkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCit7CisgICAgbV9z
aG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBt
X3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlEKSk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZpc2li
bGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSByZWN0
ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRDaGFu
Z2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBBIHplcm8gdHJhamVjdG9y
eVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBhcmUg
cmVxdWVzdGVkLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlIHx8
IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0
ID0gcmVjdDsKKyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisKKyAgICAgICAgSGFz
aFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNvbnRlbnRz
U2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUo
c2NhbGUpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAg
ICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5
b3V0KCkpCisgICAgICAgIG1fd2ViUGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVj
dCk7CisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQordm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVBbmltYXRpb24oKQor
eworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV93YWl0aW5nRm9yVUlQcm9j
ZXNzID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRlQXRs
YXNlc1tpXS5kaWRTd2FwQnVmZmVycygpOworfQorCitib29sIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbV9p
c1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9jZXNzOworfQorCit2b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnB1cmdlQmFja2luZ1N0b3JlcygpOworCisg
ICAgQVNTRVJUKCFtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLnNpemUoKSk7Cisg
ICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MgZmxhZ3Ms
IFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlLCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zm
c2V0KQoreworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBVcGRhdGVBdGxhcyYgYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV07Cisg
ICAgICAgIGlmIChhdGxhcy5mbGFncygpID09IGZsYWdzKSB7CisgICAgICAgICAgICAvLyBUaGlz
IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4K
KyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhp
Y3NDb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFz
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVm
ZmVyRGltZW5zaW9uID0gMjAwMDsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuYXBwZW5kKFVwZGF0ZUF0
bGFzKFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSk7CisgICAgcmV0dXJuIG1fdXBkYXRl
QXRsYXNlcy5sYXN0KCkuYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGhhbmRsZSwgc2l6
ZSwgb2Zmc2V0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDk0NmRi
MDFlMDZjNGU3YjUzYjEyYjgxZjdkNDQyNWFlNmQ2OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuaApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2lmbmRlZiBMYXllclRyZWVDb29yZGluYXRvcl9oCisjZGVmaW5lIExheWVyVHJlZUNvb3JkaW5h
dG9yX2gKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUg
IkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJQYWdlOworCitjbGFz
cyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1
YWwgfkxheWVyVHJlZUNvb3JkaW5hdG9yKCk7CisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29u
dGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
Kik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3Jv
bGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92
ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdl
T3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQg
PSB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3Bl
bmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBk
ZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQorICAgIHZpcnR1YWwgaW50NjRfdCBhZG9w
dEltYWdlQmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKik7CisgICAgdmlydHVhbCB2b2lkIHJl
bGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90KTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVUaWxlKFdlYkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdl
YkxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQs
IGludCB0aWxlSUQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB2aXNpYmxlQ29udGVu
dHNSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAg
IHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5
ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0IHNjYWxlLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVM
YXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyU3RhdGUoV2ViTGF5ZXJJRCwgY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxX
ZWJMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyRmlsdGVycyhXZWJMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJik7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJMYXllcklELCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjYW52YXNTaXplLCB1aW50MzJfdCBncmFwaGljc1N1cmZh
Y2VUb2tlbikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaExheWVyKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0ZpeGVkTGF5ZXJzKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFNoYXJlYWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNv
cmU6OkludFBvaW50Jik7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9WRVJSSURFOworI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGluYXRvcihXZWJQYWdlKik7CisKK3ByaXZh
dGU6CisgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGlt
ZSk7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCk7CisgICAgdmlydHVhbCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50
ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0OworCisgICAgLy8gTGF5ZXJU
cmVlQ29vcmRpbmF0b3IKKyAgICB2b2lkIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICB2
b2lkIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgYm9vbCBmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7CisgICAgdm9p
ZCBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworICAgIHZvaWQgZGlkUGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIHN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIE93
blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBs
YXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOwor
CisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mg
bm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Bh
Z2VPdmVybGF5TGF5ZXI7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKKyAgICBIYXNoTWFwPGludDY0X3QsIGludD4g
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50czsKKyAgICBWZWN0b3I8VXBkYXRlQXRs
YXM+IG1fdXBkYXRlQXRsYXNlczsKKworICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExh
eWVyRmx1c2g7CisgICAgYm9vbCBtX2lzVmFsaWQ7CisKKyAgICBib29sIG1fd2FpdGluZ0ZvclVJ
UHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Zpc2libGVDb250ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJv
b2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250
ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAg
IGJvb2wgbV9zaG91bGRTeW5jUm9vdExheWVyOworICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7CisgICAgV2ViQ29yZTo6
VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOworICAgIGJvb2wg
bV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMYXll
clRyZWVDb29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiOWMyYWNk
ZjhmODMwY2ViYzhiMTZmYmFkMzlmZmVmNzdkYjA1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI3IEBACisjCisjICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCittZXNz
YWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvciB7CisgICAgU2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChXZWJDb3JlOjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJD
b3JlOjpGbG9hdFBvaW50IHRyYWplY3RvcnlWZWN0b3J5KQorICAgIFJlbmRlck5leHRGcmFtZSgp
CisgICAgUHVyZ2VCYWNraW5nU3RvcmVzKCkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA3MWFhNjA3Y2I1ZThmNzQ4
ZTJiZmUxMzY2OTE4ZjY5Y2NlYTYxYzBkLi43NTllNjc1YWQ2NDg5ODgyYmYxN2I2MDE1NDI1MTJh
YzQwOWM1OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaApAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNj
aGVkdWxlQ29tcG9zaXRpbmdMYXllclN5bmMoKSA9IDA7CiAjZW5kaWYKIAotI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQorI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
KSA9IDA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCA1ZTZkNWVjMGEwN2M4ZjY2M2Q0OWQzODBh
NWM3MGZkMTZhN2Q4MzZhLi44ZWNkOWUyNTEzNjFhM2JhNTA4Mjg0NGY4YjBjMDEzZDIzYjAwMDk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWFJbXBsLmNwcApAQCAtNjg4LDcgKzY4OCw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjpk
aXNwbGF5KFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiAgICAgbV9kaXNwbGF5VGltZXIuc3RvcCgp
OwogfQogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQogdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29y
ZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6
TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMp
CiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAppbmRleCAyY2ViYmQ1YzRjZjQxZDI2
OTZjODk0ZjE3YzcyYjQzMGM1OGY1ZGJjLi41NWUzZGY0ODQwMGY3MTg0NTg5YTk5YjFhOTRmODdi
N2RiNzUwYjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHNldExheWVySG9zdGluZ01vZGUodWludDMyX3QpIE9WRVJSSURFOwogI2VuZGlmCiAK
LSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGlu
YXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDgyYmU1MTAwMGE1ZTEyODdjOGQ3MmZmNjE5NmFlOTBjM2YwNjFkODcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDYwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9y
LmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIK
LSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgot
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNz
TGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1NldHRpbmdzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3Iod2ViUGFnZSkpOwotfQotCi1MYXllclRyZWVDb29y
ZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9yKCkKLXsKLSAgICAvLyBQcmV2ZW50IHNldFdl
YkdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0
aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFw
aGljc0xheWVyKj4gcmVnaXN0ZXJlZExheWVyczsKLSAgICByZWdpc3RlcmVkTGF5ZXJzLnN3YXAo
bV9yZWdpc3RlcmVkTGF5ZXJzKTsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NM
YXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOwotICAgIGZvciAo
SGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0
ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRX
ZWJHcmFwaGljc0xheWVyQ2xpZW50KDApOwotfQotCi1MYXllclRyZWVDb29yZGluYXRvcjo6TGF5
ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSogd2ViUGFnZSkKLSAgICA6IExheWVyVHJlZUhvc3Qo
d2ViUGFnZSkKLSAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQot
ICAgICwgbV9pc1ZhbGlkKHRydWUpCi0gICAgLCBtX3dhaXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkK
LSAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAg
ICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUpCi0gICAgLCBtX3Nob3Vs
ZFN5bmNGcmFtZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkU3luY1Jvb3RMYXllcih0cnVlKQotICAg
ICwgbV9sYXllckZsdXNoVGltZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZs
dXNoVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKHRydWUp
Ci17Ci0gICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4KLSAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBXZWJHcmFwaGljc0xheWVyKiB3ZWJSb290TGF5
ZXIgPSB0b1dlYkdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwotICAgIHdlYlJvb3RM
YXllci0+c2V0Um9vdExheWVyKHRydWUpOwotI2lmbmRlZiBOREVCVUcKLSAgICBtX3Jvb3RMYXll
ci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0b3Igcm9vdCBsYXllciIpOwotI2VuZGlmCi0g
ICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXIt
PnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29udGV4dC53ZWJM
YXllcklEID0gdG9XZWJHcmFwaGljc0xheWVyKHdlYlJvb3RMYXllciktPmlkKCk7Ci0KLSAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcyk7
Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0V2ViR3JhcGhp
Y3NMYXllckNsaWVudCh0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciBub24tY29tcG9zaXRl
ZCBjb250ZW50Iik7Ci0jZW5kaWYKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNl
dFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7Ci0KLSAgICBpZiAobV93ZWJQYWdlLT5o
YXNQYWdlT3ZlcmxheSgpKQotICAgICAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0KLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQp
Ci17Ci0gICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hp
bmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5n
RW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOwotCi0gICAgaWYgKG1fbGF5ZXJGbHVzaFNj
aGVkdWxpbmdFbmFibGVkKSB7Ci0gICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZsdXNoKCkKLXsKLSAgICBp
ZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fbGF5ZXJGbHVz
aFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3Ao
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hvdWxkTm90aWZ5QWZ0ZXJO
ZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCkKLXsKLSAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaDsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0
Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVu
KCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZSht
X3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVl
IGhpZXJhcmNoeS4KLSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAgICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1fcm9vdExheWVyID0gbnVs
bHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAg
ICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLQot
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Ny
b2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQotewotICAgIHNl
dE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQoKQotewotICAgIC8vIFRoaXMgaXMg
bmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4gU2luY2UgaW4gdGhpcyBjYXNlIHdl
IGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8gcmVwbHkgbmljZWx5LgotICAgIC8v
IEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3JjZVJlcGFpbnQuIEJ1dCB3ZSBzdGls
bCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYmVpbmcgZXhl
Y3V0ZWQuCi0gICAgc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgLy8gV2UgbmVlZCB0byBzY2hl
ZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZvcmNlZCBwYWludCBtaWdodCBjYW5j
ZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KLSAgICAvLyBUaGlzIGlzIGFsaWduZWQgd2l0aCBM
YXllclRyZWVIb3N0Q0EuCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICBpZiAobV9y
b290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jv
b3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdTaXplIGV4cG9z
ZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0TmVlZHNEaXNw
bGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFyZWFzLgotICAg
IEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCk7
Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1NpemUpOwotCi0g
ICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewotICAgICAgICBmbG9h
dCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5oZWlnaHQoKSks
IG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgpLCAwLCBuZXdT
aXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAgIH0KLQotICAgIGlm
IChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KDAsIG9s
ZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQoKSAtIG9sZFNp
emUuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0YWxsUGFnZU92
ZXJsYXkoKQotewotICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBzY2hlZHVsZUxh
eWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkVW5pbnN0YWxs
UGFnZU92ZXJsYXkoKQotewotICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2No
ZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBh
Z2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17Ci0g
ICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3BhY2l0eShmbG9h
dCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgp
OwotfQotCi1ib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXMoKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgYm9vbCBkaWRTeW5j
ID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgaWYg
KG1fcGFnZU92ZXJsYXlMYXllcikKLSAgICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zeW5jQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIG1fcm9vdExheWVyLT5zeW5j
Q29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIGlmIChtX3Nob3VsZFN5
bmNSb290TGF5ZXIpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9zaXRpbmdMYXllcih0b1dlYkdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7Ci0gICAgICAgIG1fc2hvdWxkU3luY1Jv
b3RMYXllciA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9zaG91bGRTeW5jRnJhbWUpCi0g
ICAgICAgIHJldHVybiBkaWRTeW5jOwotCi0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRSZW5kZXJGcmFtZSgpKTsKLSAgICBtX3dhaXRp
bmdGb3JVSVByb2Nlc3MgPSB0cnVlOwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0xh
eWVyU3RhdGUoV2ViTGF5ZXJJRCBpZCwgY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAg
IGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAg
IG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBp
bmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVu
KFdlYkxheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxXZWJMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVu
KGlkLCBjaGlsZHJlbikpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2Fu
dmFzKFdlYkxheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIHVpbnQzMl90IGdy
YXBoaWNzU3VyZmFjZVRva2VuKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlN5
bmNDYW52YXMoaWQsIGNhbnZhc1NpemUsIGdyYXBoaWNzU3VyZmFjZVRva2VuKSk7Ci19Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5
ZXJGaWx0ZXJzKFdlYkxheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
Ci17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZp
bHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjphdHRhY2hMYXllcihXZWJHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBBU1NFUlQo
IW1fcmVnaXN0ZXJlZExheWVycy5jb250YWlucyhsYXllcikpOwotICAgIG1fcmVnaXN0ZXJlZExh
eWVycy5hZGQobGF5ZXIpOwotCi0gICAgbGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50
c1NjYWxlKTsKLSAgICBsYXllci0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoV2ViR3JhcGhpY3NMYXllciogbGF5ZXIpCi17
Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihsYXllci0+aWQoKSkpOwotfQot
Ci1zdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVy
KiByZW5kZXJMYXllcikKLXsKLSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhl
IGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5n
Rm9yUG9zaXRpb24uCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5
ZXItPmJhY2tpbmcoKTsKLSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwot
ICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5p
c1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJMYXllci0+
aXNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGlj
c0xheWVyKCkpOwotICAgIGdyYXBoaWNzTGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsK
LX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVy
TGF5ZXIqIHJlbmRlckxheWVyKQotewotICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNl
bGYocmVuZGVyTGF5ZXIpOwotCi0gICAgaWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0g
ICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJz
dENoaWxkKCkpOwotICAgIGlmIChyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAg
dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5n
KCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jRml4ZWRMYXllcnMoKQot
ewotICAgIGlmICghbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpIHx8ICFtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fd2ViUGFn
ZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzRml4ZWRPYmplY3RzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5G
cmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIo
KTsKLSAgICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKLSAgICBpZiAocm9vdFJlbmRlckxheWVy
LT5maXJzdENoaWxkKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVy
KHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3Vz
cGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAgICAgZGlkUGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6c3luY0Rpc3BsYXlTdGF0ZSgpCi17Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5n
IGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhj
b252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKLSNlbmRpZgotCi0g
ICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdp
bmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNo
TGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFs
c2U7Ci0gICAgfQotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGlt
ZXJGaXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIHBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0
ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsK
LQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRy
ZWVDb29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFk
ZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9wYWdl
T3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1pbnQ2NF90IExheWVy
VHJlZUNvb3JkaW5hdG9yOjphZG9wdEltYWdlQmFja2luZ1N0b3JlKEltYWdlKiBpbWFnZSkKLXsK
LSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAg
ICBpbnQ2NF90IGtleSA9IDA7Ci0KLSNpZiBQTEFURk9STShRVCkKLSAgICBRSW1hZ2UqIG5hdGl2
ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0KLSAgICBpZiAo
IW5hdGl2ZUltYWdlKQotICAgICAgICByZXR1cm4gSW52YWxpZFdlYkxheWVySUQ7Ci0KLSAgICBr
ZXkgPSBuYXRpdmVJbWFnZS0+Y2FjaGVLZXkoKTsKLSNlbmRpZgotCi0gICAgSGFzaE1hcDxpbnQ2
NF90LCBpbnQ+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VSZWZDb3Vu
dHMuZmluZChrZXkpOwotCi0gICAgaWYgKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VS
ZWZDb3VudHMuZW5kKCkpIHsKLSAgICAgICAgKysoaXQtPnNlY29uZCk7Ci0gICAgICAgIHJldHVy
biBrZXk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2UtPnNpemUoKSwgKGltYWdlLT5jdXJy
ZW50RnJhbWVIYXNBbHBoYSgpID8gU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhIDogMCkp
OwotICAgIHsKLSAgICAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gZ3JhcGhp
Y3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFBv
aW50Ojp6ZXJvKCkpOwotICAgIH0KLQotICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKLSAgICBiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlRGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2Uoa2V5LCBoYW5kbGUpKTsKLSAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
UmVmQ291bnRzLmFkZChrZXksIDEpOwotICAgIHJldHVybiBrZXk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbWFnZUJhY2tpbmdTdG9yZShpbnQ2NF90IGtleSkKLXsK
LSAgICBpZiAoIWtleSkKLSAgICAgICAgcmV0dXJuOwotICAgIEhhc2hNYXA8aW50NjRfdCwgaW50
Pjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlUmVmQ291bnRzLmZpbmQo
a2V5KTsKLSAgICBpZiAoaXQgPT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJlZkNvdW50cy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXQtPnNlY29uZC0tOwotCi0gICAgaWYgKGl0
LT5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VSZWZDb3VudHMucmVtb3ZlKGl0KTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShr
ZXkpKTsKLX0KLQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25T
dGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKLXsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQotewotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJl
Y3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyKSB7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlw
UmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZ3JhcGhpY3NMYXllciA9
PSBtX3BhZ2VPdmVybGF5TGF5ZXIpIHsKLSAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFu
c3BhcmVudCBjb250ZW50cyBhbmQgd29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0
aGVpciByZW5kZXJpbmcsIHNvIHdlIGRvIGl0IGhlcmUuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4
dC5jbGVhclJlY3QoY2xpcFJlY3QpOwotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3Zlcmxh
eShncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3Jl
UGFnZSgpLT5zZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0
aW5ncygpLT5zaG93UmVwYWludENvdW50ZXIoKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0Ojpz
dXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJ
RCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGFyZ2V0UmVjdCwg
dXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRhcmdldFJlY3QpCi17Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGFyZ2V0UmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwg
dGlsZUlEKSk7Ci19Ci0KLVdlYkNvcmU6OkludFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zpc2libGVDb250ZW50
c1JlY3Q7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2UgPSBy
ZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBib29sIGNvbnRlbnRzU2NhbGVEaWRD
aGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICAvLyBBIHplcm8gdHJhamVj
dG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCBh
cmUgcmVxdWVzdGVkLgotICAgIHRvV2ViR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRy
YWplY3RvcnlWZWN0b3IpOwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250
ZW50c1NjYWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJl
Y3Q7Ci0gICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8
V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xh
eWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCi0gICAg
ICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRzU2NhbGUoc2NhbGUpOwotICAgICAgICAgICAg
aWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0
VmlzaWJsZVJlY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOwotICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCi0gICAgICAgIG1fd2Vi
UGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3QocmVjdCk7Ci0gICAgaWYgKGNvbnRlbnRz
UmVjdERpZENoYW5nZSkKLSAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUg
PSB0cnVlOwotfQotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1hdGlvbigpCi17Ci0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVuZGVyTmV4
dEZyYW1lKCkKLXsKLSAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNl
cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLmRpZFN3YXBCdWZmZXJz
KCk7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmxheWVyVHJlZVRpbGVVcGRhdGVz
QWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRp
bmdGb3JVSVByb2Nlc3M7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnB1cmdlQmFj
a2luZ1N0b3JlcygpCi17Ci0gICAgSGFzaFNldDxXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5wdXJnZUJh
Y2tpbmdTdG9yZXMoKTsKLQotICAgIEFTU0VSVCghbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZVJl
ZkNvdW50cy5zaXplKCkpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1QYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBTaGFyZWFibGVC
aXRtYXA6OkZsYWdzIGZsYWdzLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2Vi
Q29yZTo6SW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBncmFwaGljc0NvbnRleHQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMmIGF0bGFzID0gbV91
cGRhdGVBdGxhc2VzW2ldOwotICAgICAgICBpZiAoYXRsYXMuZmxhZ3MoKSA9PSBmbGFncykgewot
ICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWls
YWJsZSBidWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy5i
ZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoaGFuZGxlLCBzaXplLCBvZmZzZXQpOwotICAg
ICAgICAgICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3Jh
cGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBj
b25zdCBpbnQgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiA9IDIwMDA7Ci0gICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChVcGRhdGVBdGxhcyhTY3JhdGNoQnVmZmVyRGltZW5zaW9uLCBmbGFncykpOwot
ICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJs
ZUJ1ZmZlcihoYW5kbGUsIHNpemUsIG9mZnNldCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJl
ZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwNmU0NWI5MzUxZjFmNTg1ODU0YzA4
YjkyNmI0NTlhYTcwNmEyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJlZUNvb3JkaW5hdG9yX2gK
LSNkZWZpbmUgTGF5ZXJUcmVlQ29vcmRpbmF0b3JfaAotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1lci5oIgot
I2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFVwZGF0ZUluZm87Ci1jbGFz
cyBXZWJQYWdlOwotCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvciA6IHB1YmxpYyBMYXllclRy
ZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAsIHB1YmxpYyBXZWJHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsK
LSAgICB2aXJ0dWFsIH5MYXllclRyZWVDb29yZGluYXRvcigpOwotCi0gICAgc3RhdGljIGJvb2wg
c3VwcG9ydHNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyVHJlZUNv
bnRleHQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
KGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29s
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXkoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxOb25Db21wb3NpdGVkQ29udGVu
dHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2Nyb2xsT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3
U2l6ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7
IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIGlu
dDY0X3QgYWRvcHRJbWFnZUJhY2tpbmdTdG9yZShXZWJDb3JlOjpJbWFnZSopOwotICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCk7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShXZWJMYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShX
ZWJMYXllcklELCBpbnQgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJh
bWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgdmlydHVh
bCBib29sIGxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9h
dCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24q
LCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwotCi0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkxheWVySUQsIGNvbnN0IFdlYkxheWVySW5m
byYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihXZWJMYXllcklELCBjb25z
dCBWZWN0b3I8V2ViTGF5ZXJJRD4mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmly
dHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoV2Vi
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY2FudmFzU2l6ZSwgdWludDMyX3QgZ3Jh
cGhpY3NTdXJmYWNlVG9rZW4pIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMYXll
cihXZWJDb3JlOjpXZWJHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaExh
eWVyKFdlYkNvcmU6OldlYkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0Zp
eGVkTGF5ZXJzKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJl
YWJsZUJpdG1hcDo6RmxhZ3MsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdlYkNvcmU6Oklu
dFBvaW50Jik7Ci0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0gICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAg
IGV4cGxpY2l0IExheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKLQotcHJpdmF0ZToKLSAg
ICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Q7Ci0KLSAgICAvLyBMYXllclRyZWVDb29y
ZGluYXRvcgotICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAgIHZvaWQgZGVz
dHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
cygpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICB2b2lkIHBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOwotICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0gICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgLy8gVGhlIGxheWVyIHdo
aWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXI7Ci0KLSAgICAv
LyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51bGwgaWYgdGhlcmUncyBubyBwYWdl
IG92ZXJsYXkuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJs
YXlMYXllcjsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllcio+IG1fcmVn
aXN0ZXJlZExheWVyczsKLSAgICBIYXNoTWFwPGludDY0X3QsIGludD4gbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZVJlZkNvdW50czsKLSAgICBWZWN0b3I8VXBkYXRlQXRsYXM+IG1fdXBkYXRlQXRs
YXNlczsKLQotICAgIGJvb2wgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci0gICAg
Ym9vbCBtX2lzVmFsaWQ7Ci0KLSAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKLSAgICBi
b29sIG1faXNTdXNwZW5kZWQ7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVDb250ZW50
c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAgIGJvb2wgbV9zaG91bGRTZW5k
U2Nyb2xsUG9zaXRpb25VcGRhdGU7Ci0KLSAgICBMYXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVl
Q29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwotICAgIGJvb2wgbV9zaG91bGRT
eW5jUm9vdExheWVyOwotICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7Ci0gICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVl
Q29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIGJvb2wgbV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQ7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRv
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFm
ZjZmOTZhZGI2YTUxZmI1M2EyN2E1MTZlYzFmZTBlNWQzOGYyMGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0j
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSMgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0jICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSMKLQotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi1tZXNzYWdlcyAtPiBM
YXllclRyZWVDb29yZGluYXRvciB7Ci0gICAgU2V0VmlzaWJsZUNvbnRlbnRzUmVjdChXZWJDb3Jl
OjpJbnRSZWN0IHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJDb3JlOjpGbG9h
dFBvaW50IHRyYWplY3RvcnlWZWN0b3J5KQotICAgIFJlbmRlck5leHRGcmFtZSgpCi0gICAgUHVy
Z2VCYWNraW5nU3RvcmVzKCkKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9yL1dlYkdyYXBoaWNzTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5h
dG9yL1dlYkdyYXBoaWNzTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
YjE2OTdmZTI1MjA0NDJlN2FkYmE5ZTBkYjIzNDhmOGI3ZWJiMWYyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9XZWJHcmFwaGljc0xheWVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc1OCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJ
TkcpCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NMYXllci5oIgotCi0jaW5jbHVkZSAiQmFja2luZ1N0
b3JlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBIYXNo
TWFwPFdlYkxheWVySUQsIFdlYkdyYXBoaWNzTGF5ZXIqPiYgbGF5ZXJCeUlETWFwKCkKLXsKLSAg
ICBzdGF0aWMgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4gZ2xvYmFsTWFw
OwotICAgIHJldHVybiBnbG9iYWxNYXA7Ci19Ci0KLVdlYkdyYXBoaWNzTGF5ZXIqIFdlYkdyYXBo
aWNzTGF5ZXI6OmxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQgaWQpCi17Ci0gICAgSGFzaE1h
cDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj4mIHRhYmxlID0gbGF5ZXJCeUlETWFwKCk7
Ci0gICAgSGFzaE1hcDxXZWJMYXllcklELCBXZWJHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0
ID0gdGFibGUuZmluZChpZCk7Ci0gICAgaWYgKGl0ID09IHRhYmxlLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gaXQtPnNlY29uZDsKLX0KLQotc3RhdGljIFdlYkxheWVySUQg
dG9XZWJMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIHJldHVybiBsYXllciA/
IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOwotfQotCi12b2lkIFdlYkdyYXBo
aWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQotewotICAgIG1fc2hvdWxkU3luY0xheWVy
U3RhdGUgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlm
eVN5bmNSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VDaGlsZHJlbigpCi17Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOwotICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeVN5bmNSZXF1aXJlZCh0aGlzKTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6ZGlk
Q2hhbmdlRmlsdGVycygpCi17Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IHRydWU7Ci0gICAg
aWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMp
OwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0U2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QoKQotewotICAgIGlmICghdHJhbnNmb3JtKCkuaXNBZmZpbmUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICB0b1dl
YkdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0
KCk7Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQotICAgICAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
cmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwotfQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKLXsKLSAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7Ci0gICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLX0KLQotV2Vi
R3JhcGhpY3NMYXllcjo6V2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCi0gICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKLSAgICAsIG1fbWFza1RhcmdldCgwKQot
ICAgICwgbV9pblVwZGF0ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNMYXllclN0YXRlKHRydWUpCi0gICAgLCBtX3No
b3VsZFN5bmNDaGlsZHJlbih0cnVlKQotICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCi0g
ICAgLCBtX2NhbnZhc05lZWRzRGlzcGxheShmYWxzZSkKLSAgICAsIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCgwKQotICAgICwgbV9jb250ZW50c1NjYWxlKDEpCi0gICAgLCBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXIoMCkKLXsKLSAgICBzdGF0aWMgV2ViTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7Ci0g
ICAgbV9pZCA9IG5leHRMYXllcklEKys7Ci0gICAgbGF5ZXJCeUlETWFwKCkuYWRkKGlkKCksIHRo
aXMpOwotfQotCi1XZWJHcmFwaGljc0xheWVyOjp+V2ViR3JhcGhpY3NMYXllcigpCi17Ci0gICAg
bGF5ZXJCeUlETWFwKCkucmVtb3ZlKGlkKCkpOwotCi0gICAgaWYgKG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudCkgewotICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV93ZWJH
cmFwaGljc0xheWVyQ2xpZW50LT5kZXRhY2hMYXllcih0aGlzKTsKLSAgICB9Ci0gICAgd2lsbEJl
RGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6d2lsbEJlRGVzdHJveWVk
KCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjp3aWxsQmVEZXN0cm95ZWQoKTsKLX0KLQotYm9vbCBX
ZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+
JiBjaGlsZHJlbikKLXsKLSAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4o
Y2hpbGRyZW4pOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkdyYXBo
aWNzTGF5ZXIqIGNoaWxkID0gdG9XZWJHcmFwaGljc0xheWVyKGNoaWxkcmVuW2ldKTsKLSAgICAg
ICAgY2hpbGQtPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50KTsKLSAgICAgICAgY2hpbGQtPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB9Ci0gICAg
ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFw
aGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBHcmFwaGlj
c0xheWVyOjphZGRDaGlsZChsYXllcik7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotICAg
IHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBk
aWRDaGFuZ2VDaGlsZHJlbigpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewotICAgIEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIHRvV2ViR3JhcGhpY3NM
YXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVy
Q2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBz
aWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxp
bmcpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXllciktPnNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIo
bGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFk
ZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwotICAgIHRvV2ViR3JhcGhpY3NMYXllcihsYXll
ciktPnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsK
LSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIobGF5ZXIpLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0g
ICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpyZXBs
YWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxk
KQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQs
IG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKLSAgICB0b1dlYkdyYXBoaWNzTGF5ZXIob2xkQ2hpbGQpLT5kaWRD
aGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgdG9XZWJHcmFwaGljc0xheWVyKG5ld0NoaWxkKS0+c2V0
V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotICAgIHRv
V2ViR3JhcGhpY3NMYXllcihuZXdDaGlsZCktPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50
KCkKLXsKLSAgICBpZiAoV2ViR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b1dlYkdyYXBo
aWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRy
ZW4oKTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci0KLSAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgcCkKLXsKLSAgICBpZiAocG9zaXRpb24oKSA9PSBwKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKLSAgICBk
aWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYgcCkKLXsKLSAgICBpZiAoYW5jaG9yUG9pbnQoKSA9
PSBwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2lu
dChwKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5
ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmICh0aGlzLT5zaXpl
KCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6
ZShzaXplKTsKLSAgICBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICBpZiAobWFza0xheWVyKCkpCi0g
ICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5
KCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0KQotewotICAgIGlmICh0cmFuc2Zvcm0oKSA9PSB0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0odCk7Ci0gICAgZGlk
Q2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
blRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAoY2hp
bGRyZW5UcmFuc2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikKLXsKLSAg
ICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQot
Ci12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQotewotICAg
IGlmIChtYXNrc1RvQm91bmRzKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNz
TGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQotewotICAg
IGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NM
YXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCi17
Ci0gICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJsZSgpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYik7Ci0KLSAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFx
dWUoYm9vbCBiKQotewotICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5n
U3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzT3BhcXVlKGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKQotewotICAgIGlmIChi
YWNrZmFjZVZpc2liaWxpdHkoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkoYik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdChjb25zdCBJbnRSZWN0JiByKQotewotICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSByKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7
Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
bV9pbWFnZTsKLSAgICBzZXRDb250ZW50c1RvSW1hZ2UoMCk7Ci0gICAgc2V0Q29udGVudHNUb0lt
YWdlKGltYWdlLmdldCgpKTsKLSAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAg
aWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5U3luY1JlcXVpcmVkKHRoaXMp
OwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcikKLXsKLSAgICBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPSBw
bGF0Zm9ybUxheWVyOwotICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKLSAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlTeW5jUmVxdWlyZWQodGhpcyk7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29sIFdlYkdyYXBoaWNzTGF5ZXI6OnNldEZp
bHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKLXsKLSAgICBpZiAoZmls
dGVycygpID09IG5ld0ZpbHRlcnMpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRpZENoYW5n
ZUZpbHRlcnMoKTsKLSAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0
ZXJzKTsKLX0KLSNlbmRpZgotCi0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGludDY0X3QgbmV3SUQgPSAwOwotICAgIGlmIChtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQpIHsKLSAgICAgICAgLy8gV2UgYWRvcHQgZmlyc3QsIGluIGNhc2UgdGhpcyBp
cyB0aGUgc2FtZSBmcmFtZSAtIHRoYXQgd2F5IHdlIGF2b2lkIGRlc3Ryb3lpbmcgYW5kIHJlY3Jl
YXRpbmcgdGhlIGltYWdlLgotICAgICAgICBuZXdJRCA9IG1fd2ViR3JhcGhpY3NMYXllckNsaWVu
dC0+YWRvcHRJbWFnZUJhY2tpbmdTdG9yZShpbWFnZSk7Ci0gICAgICAgIG1fd2ViR3JhcGhpY3NM
YXllckNsaWVudC0+cmVsZWFzZUltYWdlQmFja2luZ1N0b3JlKG1fbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgICAgIGlm
IChtX2xheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEICYmIG5ld0lEID09IG1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gSWYgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50IGlzIG5vdCBzZXQgeWV0IHRo
ZXJlIHNob3VsZCBiZSBubyBiYWNraW5nIHN0b3JlIElELgotICAgICAgICBBU1NFUlQoIW1fbGF5
ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotICAgICAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci0gICAgfQotCi0gICAgbV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCA9IG5ld0lE
OwotICAgIG1faW1hZ2UgPSBpbWFnZTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Rv
SW1hZ2UoaW1hZ2UpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihH
cmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7
Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0U2l6
ZShzaXplKCkpOwotICAgIFdlYkdyYXBoaWNzTGF5ZXIqIHdlYkdyYXBoaWNzTGF5ZXIgPSB0b1dl
YkdyYXBoaWNzTGF5ZXIobGF5ZXIpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPnNldFdlYkdyYXBo
aWNzTGF5ZXJDbGllbnQobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KTsKLSAgICB3ZWJHcmFwaGlj
c0xheWVyLT5zZXRNYXNrVGFyZ2V0KHRoaXMpOwotICAgIHdlYkdyYXBoaWNzTGF5ZXItPmRpZENo
YW5nZUxheWVyU3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0KLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBpZiAobGF5ZXIgPT0gcmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChsYXllcikKLSAgICAgICAgdG9XZWJHcmFwaGljc0xheWVyKGxheWVyKS0+
c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQpOwotCi0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOwotICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rp
c3BsYXkoKQotewotICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIEludFNpemUoc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSkpKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFp
bkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLSAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7Ci19Ci0KLVdlYkxheWVySUQgV2ViR3JhcGhpY3NMYXllcjo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX2lkOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoV2ViR3Jh
cGhpY3NMYXllciogbWFzayA9IHRvV2ViR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCi0gICAg
ICAgIG1hc2stPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAg
aWYgKFdlYkdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b1dlYkdyYXBoaWNzTGF5ZXIocmVwbGlj
YUxheWVyKCkpKQotICAgICAgICByZXBsaWNhLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKLQotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3luY0ZpeGVkTGF5
ZXJzKCk7Ci0KLSAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKLSAgICAg
ICAgY2hpbGRyZW4oKVtpXS0+c3luY0NvbXBvc2l0aW5nU3RhdGUocmVjdCk7Ci19Ci0KLVdlYkdy
YXBoaWNzTGF5ZXIqIHRvV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViR3JhcGhpY3NMYXllcio+KGxheWVyKTsKLX0KLQot
dm9pZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ2hpbGRyZW4oKQotewotICAgIGlmICghbV9zaG91
bGRTeW5jQ2hpbGRyZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Nob3VsZFN5bmNDaGlsZHJl
biA9IGZhbHNlOwotICAgIFZlY3RvcjxXZWJMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURz
LmFwcGVuZCh0b1dlYkxheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV93ZWJHcmFwaGlj
c0xheWVyQ2xpZW50LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNp
ZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJz
KCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xp
ZW50LT5zeW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3Vs
ZFN5bmNMYXllclN0YXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJT
dGF0ZSA9IGZhbHNlOwotICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9W
aWV3cG9ydCgpOwotCi0gICAgbV9sYXllckluZm8uYW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludCgp
OwotICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgp
OwotICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0o
KTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7Ci0g
ICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7Ci0gICAgbV9sYXll
ckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7Ci0gICAgbV9sYXllckluZm8uY29u
dGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7Ci0gICAgbV9sYXllckluZm8ubWFz
ayA9IHRvV2ViTGF5ZXJJRChtYXNrTGF5ZXIoKSk7Ci0gICAgbV9sYXllckluZm8ubWFza3NUb0Jv
dW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKLSAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3BhY2l0
eSgpOwotICAgIG1fbGF5ZXJJbmZvLnBhcmVudCA9IHRvV2ViTGF5ZXJJRChwYXJlbnQoKSk7Ci0g
ICAgbV9sYXllckluZm8ucG9zID0gcG9zaXRpb24oKTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2
ZXMzRCA9IHByZXNlcnZlczNEKCk7Ci0gICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvV2ViTGF5
ZXJJRChyZXBsaWNhTGF5ZXIoKSk7Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9IHNpemUoKTsKLSAg
ICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLSAgICBtX3dlYkdyYXBoaWNz
TGF5ZXJDbGllbnQtPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKLXsKLSAgICBpZiAoIW1fY2FudmFzTmVl
ZHNEaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fY2FudmFzUGxhdGZvcm1M
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
dWludDMyX3QgZ3JhcGhpY3NTdXJmYWNlVG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmNv
cHlUb0dyYXBoaWNzU3VyZmFjZSgpOwotICAgIG1fd2ViR3JhcGhpY3NMYXllckNsaWVudC0+c3lu
Y0NhbnZhcyhtX2lkLCBJbnRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpLCBn
cmFwaGljc1N1cmZhY2VUb2tlbik7Ci0jZW5kaWYKLSAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9
IGZhbHNlOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmVuc3VyZUltYWdlQmFja2luZ1N0
b3JlKCkKLXsKLSAgICBpZiAoIW1faW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1f
bGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpCi0gICAgICAgIG1fbGF5ZXJJbmZvLmltYWdl
QmFja2luZ1N0b3JlSUQgPSBtX3dlYkdyYXBoaWNzTGF5ZXJDbGllbnQtPmFkb3B0SW1hZ2VCYWNr
aW5nU3RvcmUobV9pbWFnZS5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICAvLyBUaGUgcmVtb3Rl
IGltYWdlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBieSBwdXJnZUJhY2tpbmdTdG9yZXMuCi0g
ICAgZW5zdXJlSW1hZ2VCYWNraW5nU3RvcmUoKTsKLSAgICBjb21wdXRlVHJhbnNmb3JtZWRWaXNp
YmxlUmVjdCgpOwotICAgIHN5bmNDaGlsZHJlbigpOwotICAgIHN5bmNMYXllclN0YXRlKCk7Ci0j
aWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHN5bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB1
cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHN5bmNDYW52YXMoKTsKLX0KLQotdm9pZCBXZWJH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQotewotfQotCi12b2lk
IFdlYkdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKLXsKLSAgICBtX2xh
eWVySW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIGlm
IChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJX
aXRoVGlsZXNJZk5lZWRlZCh0cmFqZWN0b3J5VmVjdG9yKTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQotewotICAgIG1fY29udGVudHNT
Y2FsZSA9IHNjYWxlOwotICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLX0KLQotZmxvYXQgV2Vi
R3JhcGhpY3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCi17Ci0gICAgcmV0dXJuIHNo
b3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkgPyBtX2NvbnRlbnRzU2NhbGUgOiAxOwotfQotCi12
b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUoKQotewotICAgIGlmICgh
ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9tYWluQmFja2lu
Z1N0b3JlIHx8IG1fbWFpbkJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IGVmZmVjdGl2
ZUNvbnRlbnRzU2NhbGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmV0d2VlbiBjcmVh
dGluZyB0aGUgbmV3IGJhY2tpbmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LAotICAg
IC8vIHdlIGRvIG5vdCB3YW50IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGF0IG1pZ2h0
IHJlc3VsdCBpbgotICAgIC8vIGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJpbmcgYXMgdGhlIG9sZCB0
aWxlcyBtYXkgYmUgZHJvcHBlZCBiZWZvcmUKLSAgICAvLyBzb21ldGhpbmcgcmVwbGFjZXMgdGhl
bS4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVh
c2UoKTsKLQotICAgIC8vIE5vIHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0
b3JlIGZvciBub24tdmlzaWJsZSBhcmVhcy4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5y
ZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKTsKLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAg
bV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVkQmFja2luZ1N0b3JlKHRoaXMs
IFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkpOwotICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFxdWUoKSk7
Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRHcmFw
aGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1
cGRhdGVkUmVjdHMpCi17Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5n
U3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luVXBkYXRlTW9kZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3dlYkdyYXBoaWNzTGF5ZXJDbGll
bnQtPmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpOwotfQotCi1JbnRSZWN0IFdlYkdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKLXsKLSAgICByZXR1cm4g
SW50UmVjdCgwLCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKLX0KLQotYm9v
bCBXZWJHcmFwaGljc0xheWVyOjpzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpCi17Ci0gICAg
cmV0dXJuICFzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci19Ci0KLUlu
dFJlY3QgV2ViR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCi17
Ci0gICAgaWYgKCFzaG91bGRVc2VUaWxlZEJhY2tpbmdTdG9yZSgpKQotICAgICAgICByZXR1cm4g
dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKLQotICAgIC8vIE5vbi1pbnZlcnRpYmxl
IGxheWVycyBhcmUgbm90IHZpc2libGUuCi0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJp
bmVkKCkuaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAv
LyBSZXR1cm4gYSBwcm9qZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRp
bmF0ZXMpIG9udG8gdGhlIGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KLSAgICAv
LyBUaGUgcmVzdWx0aW5nIHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVj
dCBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgcXVhZCwKLSAgICAvLyBzbyBpdCBtaWdodCBz
cHJlYWQgZnVydGhlciB0aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBt
b3JlIGFtcGxpZmllZCBieSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KLSAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpLmNs
YW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtX3dlYkdyYXBo
aWNzTGF5ZXJDbGllbnQtPnZpc2libGVDb250ZW50c1JlY3QoKSkpKSk7Ci19Ci0KLUNvbG9yIFdl
YkdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0
cmFuc3BhcmVudDsKLX0KLQotUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IFdl
YkdyYXBoaWNzTGF5ZXI6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplLCBTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSwgV2ViQ29yZTo6SW50UG9p
bnQmIG9mZnNldCkKLXsKLSAgICByZXR1cm4gbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT5iZWdp
bkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IDAgOiBTaGFyZWFibGVCaXRt
YXA6OlN1cHBvcnRzQWxwaGEsIGhhbmRsZSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBXZWJHcmFwaGlj
c0xheWVyOjpjcmVhdGVUaWxlKGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIG1fd2ViR3JhcGhp
Y3NMYXllckNsaWVudC0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRhcmdl
dFJlY3QpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUoaW50IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QpCi17Ci0gICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50LT51cGRhdGVUaWxlKGlk
KCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGFyZ2V0UmVjdCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhp
Y3NMYXllcjo6cmVtb3ZlVGlsZShpbnQgdGlsZUlEKQotewotICAgIG1fd2ViR3JhcGhpY3NMYXll
ckNsaWVudC0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lkIFdlYkdyYXBoaWNz
TGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKLXsKLSAgICBpZiAoIWRyYXdzQ29udGVudCgp
KSB7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgICAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2luVXBkYXRlTW9kZSA9IHRydWU7Ci0gICAgLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAo
cmUpY3JlYXRlIHRoZSBtYWluIHRpbGVkIGJhY2tpbmcgc3RvcmUsIG9uY2Ugd2UKLSAgICAvLyBo
YXZlIGEgcmVtb3RlIGNsaWVudCBhbmQgd2UgYXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8g
dGhlIFVJIHByb2Nlc3MuCi0gICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIGNy
ZWF0ZUJhY2tpbmdTdG9yZSgpOwotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZUJ1
ZmZlcnMoKTsKLSAgICBtX2luVXBkYXRlTW9kZSA9IGZhbHNlOwotCi0gICAgLy8gVGhlIHByZXZp
b3VzIGJhY2tpbmcgc3RvcmUgaXMga2VwdCBhcm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3
ZWVuCi0gICAgLy8gcmVtb3ZpbmcgdGhlIGV4aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUg
bmV3IG9uZXMuIFRoZSBmaXJzdCB0aW1lCi0gICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwg
cGFpbnRlZCB3ZSByZW1vdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUuCi0gICAgaWYgKG1f
bWFpbkJhY2tpbmdTdG9yZS0+dmlzaWJsZUFyZWFJc0NvdmVyZWQoKSkKLSAgICAgICAgbV9wcmV2
aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnB1
cmdlQmFja2luZ1N0b3JlcygpCi17Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0g
ICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwotCi0gICAgaWYgKG1fbGF5ZXJJbmZv
LmltYWdlQmFja2luZ1N0b3JlSUQpIHsKLSAgICAgICAgbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50
LT5yZWxlYXNlSW1hZ2VCYWNraW5nU3RvcmUobV9sYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJ
RCk7Ci0gICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQgPSAwOwotICAgIH0K
LQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwot
fQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OnNldFdlYkdyYXBoaWNzTGF5ZXJDbGllbnQoV2Vi
S2l0OjpXZWJHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgaWYgKG1fd2ViR3Jh
cGhpY3NMYXllckNsaWVudCA9PSBjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChX
ZWJHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9XZWJHcmFwaGljc0xheWVyKHJlcGxpY2FMYXll
cigpKSkKLSAgICAgICAgcmVwbGljYS0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGllbnQp
OwotICAgIGlmIChXZWJHcmFwaGljc0xheWVyKiBtYXNrID0gdG9XZWJHcmFwaGljc0xheWVyKG1h
c2tMYXllcigpKSkKLSAgICAgICAgbWFzay0+c2V0V2ViR3JhcGhpY3NMYXllckNsaWVudChjbGll
bnQpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkg
ewotICAgICAgICBXZWJHcmFwaGljc0xheWVyKiBsYXllciA9IHRvV2ViR3JhcGhpY3NMYXllcih0
aGlzLT5jaGlsZHJlbigpW2ldKTsKLSAgICAgICAgbGF5ZXItPnNldFdlYkdyYXBoaWNzTGF5ZXJD
bGllbnQoY2xpZW50KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBoYXZlIHRvIHJlbGVhc2UgcmVzb3Vy
Y2VzIG9uIHRoZSBVSSBwcm9jZXNzIGhlcmUgaWYgdGhlIHJlbW90ZSBjbGllbnQgaGFzIGNoYW5n
ZWQgb3IgaXMgcmVtb3ZlZC4KLSAgICBpZiAobV93ZWJHcmFwaGljc0xheWVyQ2xpZW50KSB7Ci0g
ICAgICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgICAgICBtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQtPmRldGFjaExheWVyKHRoaXMpOwotICAgIH0KLSAgICBtX3dlYkdyYXBoaWNzTGF5ZXJD
bGllbnQgPSBjbGllbnQ7Ci0gICAgaWYgKGNsaWVudCkKLSAgICAgICAgY2xpZW50LT5hdHRhY2hM
YXllcih0aGlzKTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0xheWVyOjphZGp1c3RWaXNpYmxlUmVj
dCgpCi17Ci0gICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2lu
Z1N0b3JlLT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NM
YXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQotewotICAgIGlmICghbV9zaG91
bGRVcGRhdGVWaXNpYmxlUmVjdCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkVXBkYXRl
VmlzaWJsZVJlY3QgPSBmYWxzZTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNm
b3JtKHRyYW5zZm9ybSgpKTsKLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKHBvc2l0
aW9uKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9pbnQo
KSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRTaXplKHNpemUoKSk7Ci0gICAgbV9sYXllclRy
YW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKLSAgICBtX2xheWVyVHJhbnNm
b3JtLnNldENoaWxkcmVuVHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOwotICAgIG1fbGF5
ZXJUcmFuc2Zvcm0uY29tYmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b1dlYkdyYXBoaWNzTGF5
ZXIocGFyZW50KCkpLT5tX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCkpOwotCi0gICAgLy8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3
aWxsIGJlIHVzZWQgaW4gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdC4KLSAgICBhZGp1c3RW
aXNpYmxlUmVjdCgpOwotICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLX0KLQotc3RhdGljIFBh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gY3JlYXRlV2ViR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJHcmFwaGlj
c0xheWVyKGNsaWVudCkpOwotfQotCi12b2lkIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5
KCkKLXsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRHcmFwaGljc0xheWVyRmFjdG9yeShjcmVhdGVX
ZWJHcmFwaGljc0xheWVyKTsKLX0KLQotYm9vbCBXZWJHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNl
c3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zv
cm0uY29tYmluZWQoKS5pc0FmZmluZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNvb3JkaW5hdG9y
L1dlYkdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUxOWQw
Njc1MDQxZDA0NjFjNGM3NTVkNGE3NzU5MjM4NGFhMTYxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvV2ViR3JhcGhpY3NMYXllci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjA4ICswLDAgQEAKLSAgICAvKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotCi0jaWZuZGVmIFdlYkdyYXBoaWNzTGF5ZXJfaAotI2RlZmluZSBXZWJHcmFwaGljc0xh
eWVyX2gKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiSW1h
Z2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
Ci0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5o
IgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBXZWJHcmFwaGljc0xheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViR3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoV2Vi
TGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBp
bnQgdGlsZUlEKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgdmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVw
ZGF0ZXNBbGxvd2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgaW50NjRfdCBhZG9wdEltYWdl
QmFja2luZ1N0b3JlKFdlYkNvcmU6OkltYWdlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlSW1hZ2VCYWNraW5nU3RvcmUoaW50NjRfdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShXZWJMYXllcklELCBjb25zdCBXZWJMYXllckluZm8mKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKFdlYkxheWVySUQsIGNvbnN0IFZlY3RvcjxXZWJM
YXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckZpbHRlcnMoV2ViTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0
aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQotICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ2FudmFzKFdlYkxheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNhbnZhc1NpemUs
IHVpbnQzMl90IGdyYXBoaWNzU3VyZmFjZVRva2VuKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6V2ViR3JhcGhpY3NMYXllciopID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0ZpeGVkTGF5ZXJzKCkgPSAwOwotICAgIHZpcnR1YWwgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiwgU2hhcmVhYmxlQml0bWFwOjpGbGFncywgU2hhcmVhYmxlU3Vy
ZmFjZTo6SGFuZGxlJiwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Ci19OwotfQotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdlYkdyYXBoaWNzTGF5ZXIgOiBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NMYXllcgotICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBUaWxlZEJhY2tp
bmdTdG9yZUNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBXZWJLaXQ6OlRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+V2ViR3JhcGhpY3NM
YXllcigpOwotCi0gICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyLmgu
Ci0gICAgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jik7Ci0g
ICAgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEF0SW5k
ZXgoR3JhcGhpY3NMYXllciosIGludCk7Ci0gICAgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKik7Ci0gICAgYm9vbCByZXBsYWNlQ2hpbGQoR3JhcGhpY3NM
YXllciosIEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKLSAg
ICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHNldEFuY2hv
clBvaW50KGNvbnN0IEZsb2F0UG9pbnQzRCYpOwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYpOwotICAgIHZvaWQgc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmKTsKLSAgICB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpOwotICAgIHZvaWQgc2V0TWFz
a3NUb0JvdW5kcyhib29sKTsKLSAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sKTsKLSAgICB2
b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKTsKLSAgICB2b2lkIHNldENvbnRlbnRzT3BhcXVl
KGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wpOwotICAgIHZvaWQg
c2V0T3BhY2l0eShmbG9hdCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVj
dCYpOwotICAgIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7Ci0gICAgdm9pZCBzZXRD
b250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKTsKLSAgICB2b2lkIHNldE1hc2tMYXllcihH
cmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xh
eWVyKik7Ci0gICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKLSAgICB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldENvbnRlbnRzTmVlZHNE
aXNwbGF5KCk7Ci0gICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwot
Ci0gICAgV2ViS2l0OjpXZWJMYXllcklEIGlkKCkgY29uc3Q7Ci0gICAgc3RhdGljIFdlYkdyYXBo
aWNzTGF5ZXIqIGxheWVyQnlJRChXZWJLaXQ6OldlYkxheWVySUQpOwotICAgIHZvaWQgZGlkU3lu
Y2hyb25pemUoKTsKLSAgICBJbWFnZSogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9
Ci0KLSAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1Zp
ZXdwb3J0OyB9Ci0gICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1f
Zml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsgfQotCi0gICAgR3JhcGhpY3NMYXllciogbWFza1Rh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RhcmdldDsgfQotICAgIHZvaWQgc2V0TWFza1Rh
cmdldChHcmFwaGljc0xheWVyKiBsYXllcikgeyBtX21hc2tUYXJnZXQgPSBsYXllcjsgfQotCi0g
ICAgc3RhdGljIHZvaWQgaW5pdEZhY3RvcnkoKTsKLQotICAgIC8vIFRpbGVkQmFja2luZ1N0b3Jl
Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwot
ICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWlu
dEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdGlsZWRCYWNraW5nU3RvcmVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
SW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpOwotICAgIHZpcnR1YWwgSW50
UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCk7Ci0gICAgdmlydHVhbCBDb2xvciB0
aWxlZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotCi0gICAgLy8gVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUo
aW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShpbnQgdGlsZUlELCBj
b25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpOwotICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViS2l0OjpTaGFyZWFibGVTdXJmYWNlOjpIYW5kbGUm
LCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi0gICAgdm9pZCBzZXRXZWJHcmFwaGljc0xheWVyQ2xp
ZW50KFdlYktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCopOwotICAgIHZvaWQgc3luY0NoaWxk
cmVuKCk7Ci0gICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOwotI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLSAgICB2b2lkIHN5bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHN5bmNDYW52YXMo
KTsKLSAgICB2b2lkIGVuc3VyZUltYWdlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICB2b2lkIGFkanVz
dFZpc2libGVSZWN0KCk7Ci0gICAgYm9vbCBpc1JlYWR5Rm9yVGlsZUJ1ZmZlclN3YXAoKSBjb25z
dDsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0gICAgdm9pZCBwdXJnZUJhY2tp
bmdTdG9yZXMoKTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlRGVzdHJveWVk
KCk7Ci0gICAgV2ViS2l0OjpXZWJMYXllcklEIG1faWQ7Ci0gICAgV2ViS2l0OjpXZWJMYXllcklu
Zm8gbV9sYXllckluZm87Ci0gICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwotICAgIEdyYXBoaWNz
TGF5ZXIqIG1fbWFza1RhcmdldDsKLSAgICBGbG9hdFJlY3QgbV9uZWVkc0Rpc3BsYXlSZWN0Owot
ICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKLSAgICBib29sIG1f
aW5VcGRhdGVNb2RlIDogMTsKLSAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7
Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOwotICAgIGJvb2wgbV9zaG91bGRT
eW5jQ2hpbGRyZW46IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOwotICAgIGJv
b2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwotICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkg
OiAxOwotCi0gICAgdm9pZCBub3RpZnlDaGFuZ2UoKTsKLSAgICB2b2lkIGRpZENoYW5nZUdlb21l
dHJ5KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBkaWRDaGFu
Z2VDaGlsZHJlbigpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5n
ZUZpbHRlcnMoKTsKLSNlbmRpZgotCi0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQot
ICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotICAgIGJv
b2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lkIGFkanVzdENvbnRlbnRz
U2NhbGUoKTsKLSAgICB2b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAg
dm9pZCBzeW5jTGF5ZXJQYXJhbWV0ZXJzKCk7Ci0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCgpOwotICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKLQotICAgIFdl
YktpdDo6V2ViR3JhcGhpY3NMYXllckNsaWVudCogbV93ZWJHcmFwaGljc0xheWVyQ2xpZW50Owot
ICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3Jl
OwotICAgIE93blB0cjxXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tp
bmdTdG9yZTsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0gICAgUGxhdGZvcm1MYXllciog
bV9jYW52YXNQbGF0Zm9ybUxheWVyOwotfTsKLQotV2ViR3JhcGhpY3NMYXllciogdG9XZWJHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKTsKLQotfQotI2VuZGlmCi0KLSNlbmRpZiAvLyBXZWJH
cmFwaGljc0xheWVyX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
TGF5ZXJUcmVlSG9zdC5oCmluZGV4IDEzNzJmMmEyOTY0OGIzZjEwMTBlYzEzN2IyNDQ5NmFlOGY2
ZDYxNzYuLjljMmU3NDRmNGRmZDMxYjE5NzA4ZDEyZWIxNGYzNTk5NzVhMmJiYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAt
ODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgfQogCi0jaWYgVVNFKFVJ
X1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yTGF5ZXIoaW50IGxheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCkgeyB9CkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6
R3JhcGhpY3NEZXZpY2VBZGFwdGVyKiBncmFwaGljc0RldmljZUFkYXB0ZXIoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAjZW5kaWYKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRp
b24oKSA9IDA7CiAjZW5kaWYKIApAQCAtMTE0LDcgKzExNCw3IEBAIHByb3RlY3RlZDoKIAogICAg
IFdlYlBhZ2UqIG1fd2ViUGFnZTsKIAotI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBib29sIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
czsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMjU2MDBiMTQ3MTI4NTFlOTM0OWJjZGQ1ODU4YjY3Y2Jl
MDZjMWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZS5oIgotCi0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IlN1cmZhY2VVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1U
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZShU
aWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3Rv
cmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkK
LSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRC
YWNraW5nU3RvcmUpCi0gICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCi0gICAgLCBt
X3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRp
bmF0ZSkpCi0gICAgLCBtX0lEKDApCi0gICAgLCBtX2RpcnR5UmVjdChtX3JlY3QpCi17Ci19Ci0K
LVRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6flRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGls
ZSgpCi17Ci0gICAgaWYgKG1fSUQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQp
OwotfQotCi1ib29sIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZTo6aXNEaXJ0eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkKLXsKLSAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0
LCBtX3JlY3QpOwotICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Ci19Ci0KLVZlY3Rv
cjxJbnRSZWN0PiBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIo
KQotewotICAgIGlmICghaXNEaXJ0eSgpKQotICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+
KCk7Ci0KLSAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFw
aGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRh
dGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLnN1cmZhY2VIYW5kbGUsIHVwZGF0ZUlu
Zm8uc3VyZmFjZU9mZnNldCk7Ci0gICAgaWYgKCFncmFwaGljc0NvbnRleHQpCi0gICAgICAgIHJl
dHVybiBWZWN0b3I8SW50UmVjdD4oKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgt
bV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1f
dGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwotICAgIG1fdGlsZWRCYWNraW5n
U3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5n
ZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOwot
Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAgdXBkYXRlSW5m
by51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKLSAgICB1cGRhdGVJ
bmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0KLSAgICBzdGF0aWMgaW50IGlkID0gMDsK
LSAgICBpZiAoIW1fSUQpIHsKLSAgICAgICAgbV9JRCA9ICsraWQ7Ci0gICAgICAgIG1fY2xpZW50
LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0KLSAg
ICBtX2RpcnR5UmVjdCA9IEludFJlY3QoKTsKLSAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7
Ci19Ci0KLXZvaWQgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlOjpzd2FwQmFja0J1ZmZlclRv
RnJvbnQoKQotewotICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4K
LX0KLQotYm9vbCBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmlzUmVhZHlUb1BhaW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gISFtX0lEOwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0b3Jl
UmVtb3RlVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFRpbGVkQmFj
a2luZ1N0b3JlUmVtb3RlVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0g
ICAgbV9yZWN0ID0gSW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7Ci0gICAgbV9k
aXJ0eVJlY3QgPSBtX3JlY3Q7Ci19Ci0KLVRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tl
bmQ6OlRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUJhY2tlbmQoVGlsZWRCYWNraW5nU3RvcmVS
ZW1vdGVUaWxlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi17Ci19Ci0K
LVBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZDo6Y3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5n
U3RvcmUsIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQot
ewotICAgIHJldHVybiBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGU6OmNyZWF0ZShtX2NsaWVu
dCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKTsKLX0KLQotdm9pZCBUaWxlZEJh
Y2tpbmdTdG9yZVJlbW90ZVRpbGVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpCi17Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVGlsZWRCYWNr
aW5nU3RvcmVSZW1vdGVUaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGNhZTExZTliYjc3YWQxNDQ0NzlhNGFhMmFiODJmNGM4YWE5MjA5ZjMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlX2gKLSNkZWZpbmUgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlX2gKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiU2hh
cmVhYmxlU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tp
bmdTdG9yZS5oIgotI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlOwotfQot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
Q2xpZW50OwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci0KLWNsYXNzIFRpbGVkQmFja2luZ1N0
b3JlUmVtb3RlVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUaWxlPiBjcmVhdGUoVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xp
ZW50KiBjbGllbnQsIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9y
ZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwg
dGlsZUNvb3JkaW5hdGUpKTsgfQotICAgIH5UaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGUoKTsK
LQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJh
Y2tCdWZmZXIoKTsKLSAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wg
aXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0IENvb3JkaW5h
dGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KLSAgICBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAg
dm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIFRp
bGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZShUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGll
bnQqLCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKLQot
ICAgIFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7Ci0gICAgQ29vcmRp
bmF0ZSBtX2Nvb3JkaW5hdGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7Ci0KLSAgICBp
bnQgbV9JRDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fZGlydHlSZWN0OwotCi0gICAgT3duUHRy
PFdlYkNvcmU6OkltYWdlQnVmZmVyPiBtX2xvY2FsQnVmZmVyOwotfTsKLQotY2xhc3MgVGlsZWRC
YWNraW5nU3RvcmVSZW1vdGVUaWxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5UaWxl
ZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlVGlsZShpbnQgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoaW50IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKGludCB0aWxlSUQpID0gMDsKLSAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFNoYXJlYWJsZVN1cmZhY2U6OkhhbmRsZSYsIFdl
YkNvcmU6OkludFBvaW50JikgPSAwOwotfTsKLQotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVSZW1v
dGVUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQg
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlQmFja2VuZD4gY3JlYXRlKFRpbGVkQmFja2luZ1N0b3JlUmVtb3RlVGlsZUNsaWVudCogY2xp
ZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFj
a2VuZChjbGllbnQpKTsgfQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGls
ZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3Jk
aW5hdGUmKTsKLSAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgVGls
ZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxlQmFja2VuZChUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRp
bGVDbGllbnQqKTsKLSAgICBUaWxlZEJhY2tpbmdTdG9yZVJlbW90ZVRpbGVDbGllbnQqIG1fY2xp
ZW50OwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxF
RF9CQUNLSU5HX1NUT1JFKQotCi0jZW5kaWYgLy8gVGlsZWRCYWNraW5nU3RvcmVSZW1vdGVUaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRs
YXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmNw
cAppbmRleCAwYWNkMzQ4NmMyOTAxNDIwN2U3ZTRiYjhkOGIwYTBmZTY4ZDlkMzI2Li41ODg2OWYz
OTk3NjgwMzAwMWIwM2FlYTkwNWExMWQ2ODIxYjNkYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9VcGRhdGVBdGxhcy5jcHAKQEAgLTIwLDcgKzIwLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgogCi0jaWYgVVNF
KFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1VwZGF0ZUF0bGFzLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaAppbmRleCA3NDc2
MGE1YjQ5ZDQ1OGZhMTg4NWMzZjYwYjg3ZTdmMjMwNTczMzI5Li43ZDIyMjM3NjliMTJiM2YwZDdk
Mjk0YmMyNmY3NThkYjM5Y2FjMDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVXBkYXRlQXRsYXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVXBkYXRlQXRsYXMuaApAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSAiU2hh
cmVhYmxlU3VyZmFjZS5oIgogCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwogY2xhc3MgSW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCmluZGV4IGNiNzJjYjliZTZlOTJlMmIzZWY4YTM3
MTc2Y2NkZThkYmUxZTYxZmYuLjI4YjIwMGQxM2YyMjExY2ZmZWRmNTM0MzlhYzBhNWRhNzBkMDBk
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFp
blF0LmNwcApAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW5jbHVkZSAiV2ViR3JhcGhpY3NM
YXllci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgogI2VuZGlmCiAj
aWYgVVNFKFFUS0lUKQogI2luY2x1ZGUgIldlYlN5c3RlbUludGVyZmFjZS5oIgpAQCAtMTgxLDcg
KzE4MSw3IEBAIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoUUd1aUFwcGxpY2F0
aW9uKiBhcHApCiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIFdlYkdyYXBoaWNzTGF5ZXI6OmluaXRGYWN0b3J5KCk7CisgICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjppbml0RmFjdG9yeSgpOwogI2VuZGlmCiAKICAgICBXZWJLaXQ6OldlYlBy
b2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>