<?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>104641</bug_id>
          
          <creation_ts>2012-12-10 23:56:31 -0800</creation_ts>
          <short_desc>Coordinated Graphics: Rename LayerTreeCoordinator to CoordinatedLayerTreeHost</short_desc>
          <delta_ts>2013-03-09 00:54:07 -0800</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>0</everconfirmed>
          <reporter name="Gwang Yoon Hwang">yoon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jaepark</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>788103</commentid>
    <comment_count>0</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-10 23:56:31 -0800</bug_when>
    <thetext>Coordinated Graphics: Rename LayerTreeCoordinator to CoordinatedLayerTreeHost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788113</commentid>
    <comment_count>1</comment_count>
      <attachid>178736</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 00:04:20 -0800</bug_when>
    <thetext>Created attachment 178736
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788139</commentid>
    <comment_count>2</comment_count>
      <attachid>178736</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-11 00:58:20 -0800</bug_when>
    <thetext>Comment on attachment 178736
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:73
&gt; +    CoordinatedLayerTreeHostProxy* coordinatedLayerTreeHostProxy = webPageProxy-&gt;drawingArea()-&gt;coordinatedLayerTreeHostProxy();

I think calling the local variable for just layerTreeHostProxy is fine as it is an impl of LayerTreeHostProxy

Maybe also do this for the getter if we don&apos;t differentiate the two</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788208</commentid>
    <comment_count>3</comment_count>
      <attachid>178752</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 02:00:38 -0800</bug_when>
    <thetext>Created attachment 178752
Patch

Refactor QQuickWebPagePrivate to make a cleaner code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788723</commentid>
    <comment_count>4</comment_count>
      <attachid>178861</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2012-12-11 13:25:03 -0800</bug_when>
    <thetext>Created attachment 178861
Rebase after r137293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788760</commentid>
    <comment_count>5</comment_count>
      <attachid>178861</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-11 13:53:44 -0800</bug_when>
    <thetext>Comment on attachment 178861
Rebase after r137293

This is fine with me, but I&apos;d like someone else that&apos;s affected by it (Kenneth?) to look as well and commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788770</commentid>
    <comment_count>6</comment_count>
      <attachid>178861</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 14:05:03 -0800</bug_when>
    <thetext>Comment on attachment 178861
Rebase after r137293

Clearing flags on attachment: 178861

Committed r137358: &lt;http://trac.webkit.org/changeset/137358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788771</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 14:05:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788948</commentid>
    <comment_count>8</comment_count>
      <attachid>178861</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-11 16:28:15 -0800</bug_when>
    <thetext>Comment on attachment 178861
Rebase after r137293

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

&gt; Source/WebKit2/UIProcess/DrawingAreaProxy.h:104
&gt; +    OwnPtr&lt;CoordinatedLayerTreeHostProxy&gt; m_coordinatedLayerTreeHostProxy;

I was OK with the patch, just wondering whether it would be better to just call this like m_layerTreeHostProxy as we are supposely just a specialized version and most of the places the &quot;coordinated&quot; is obvious

&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp:372
&gt; +        m_coordinatedLayerTreeHostProxy-&gt;didReceiveCoordinatedLayerTreeHostProxyMessage(connection, messageID, decoder);

like m_layerTreeHostProxy-&gt;didReceiveMessage ? It is almost like double here</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178736</attachid>
            <date>2012-12-11 00:04:20 -0800</date>
            <delta_ts>2012-12-11 02:00:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104641-20121211170143.patch</filename>
            <type>text/plain</type>
            <size>169933</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmJkM2QxOTZjMjJjYTA2
MWI5Y2Q1ZWVhNTc0Y2I0YTZjY2RlMWM0MS4uMjY4MDBkYmViMzNjN2ZiZTA0ODI1NzBmNzI3ZTkz
OWFlMzkxOGE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NyBAQAorMjAxMi0xMi0xMCAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFJlbmFtZSBMYXllclRyZWVDb29yZGluYXRvciB0byBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNDY0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBuYW1lIG9mIExheWVyVHJlZUNvb3JkaW5hdG9yIGRvZXMgbm90IG1hdGNoIExh
eWVyVHJlZUhvc3QuICBUaGlzCisgICAgICAgIHBhdGNoIHJlbmFtZXMgaXQgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGp1c3QgYSByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLnByaToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwu
Y3BwOgorICAgICAgICAoRXdrVmlld0ltcGw6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2Vi
UGFnZVByaXZhdGU6OnBhaW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50
Tm9kZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAoUVJh
d1dlYlZpZXc6OnNldFNpemUpOgorICAgICAgICAoUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRl
cmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmNwcC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcik6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxl
Rm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9z
aXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0
aW5nTGF5ZXJGaWx0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QW5pbWF0aW9uc0xvY2tlZCk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJhbWVSZWFkeSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmguCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6bGF5ZXJUcmVlUmVuZGVy
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVy
OjpMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVy
OjphbmltYXRpb25GcmFtZVJlYWR5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVy
ZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpw
dXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6
ZGV0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZVJlbmRl
cmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
Ojpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChEcmF3aW5nQXJlYVBy
b3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94eUltcGwp
OgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
OjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OnNldFZpc2libGVDb250ZW50c1JlY3Qp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9Q
YWdlQ2xpZW50TGVnYWN5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRMZWdh
Y3lJbXBsOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZGlkQ2hhbmdlQ29u
dGVudHNTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFNo
b3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXROb25Db21wb3NpdGVk
Q29udGVudHNOZWVkRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRJbnN0YWxsUGFnZU92ZXJs
YXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZFVuaW5z
dGFsbFBhZ2VPdmVybGF5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVS
b290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveGllcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldGFjaExheWVyKToK
KyAgICAgICAgKFdlYktpdDo6dXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZik6CisgICAg
ICAgIChXZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jRml4ZWRMYXllcnMpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxvY2tBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1bmxvY2tBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3Jt
U2NoZWR1bGVkTGF5ZXJGbHVzaCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c3luY0Rpc3BsYXlTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2gpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVQYWdlT3Zl
cmxheUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VCYWNraW5nKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUZsdXNoUmVx
dWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50
Q29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNy
ZWF0ZUdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0OjpzdXBw
b3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxl
Q29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2NoZWR1bGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHkpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxv
d2VkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJh
Y2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmJlZ2luQ29udGVudFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNv
b3JkaW5hdG9yLmguCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojps
YXllclRyZWVDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGF1c2VSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlc3VtZVJlbmRlcmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGV2aWNlU2NhbGVGYWN0
b3JEaWRDaGFuZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oOgorICAgICAgICAoRHJhd2luZ0FyZWEpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmg6CisgICAg
ICAgIChEcmF3aW5nQXJlYUltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAo
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6fldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRSZWNlaXZl
TWVzc2FnZSk6CisKIDIwMTItMTItMTAgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggOGRlMzE5MTAyZTI1YzRk
NDU4MmQ2Mjg0M2UyZTEwZTZkODY4ZjMyNi4uMjQzZDkwYzVlZjI0NTdlZGRiNTQ3NTRlNWNhOWM5
Mzg1MDc1ZTlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTM0OCw3ICszNDgsNyBAQCBzZXQo
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rp
b25TcGFjZS5jcHAKIAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmNwcAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCisgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCiAKICAgICBVSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCkBAIC01MDIsNyArNTAyLDcgQEAgc2V0KFdlYktp
dDJfU09VUkNFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwCi0gICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAogKQogCkBAIC01MzQsNyArNTM0LDcgQEAgc2V0KFdlYktp
dDJfTUVTU0FHRVNfSU5fRklMRVMKICAgICBVSVByb2Nlc3MvV2ViVmlicmF0aW9uUHJveHkubWVz
c2FnZXMuaW4KIAogCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbgorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCiAKICAgICBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkubWVzc2FnZXMuaW4KIApAQCAtNTc5LDcg
KzU3OSw3IEBAIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZUdyb3VwUHJveHkubWVzc2FnZXMuaW4KIAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCisgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
Lm1lc3NhZ2VzLmluCiApCiAKIHNldChXZWJQcm9jZXNzX0VYRUNVVEFCTEVfTkFNRSBXZWJQcm9j
ZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpIGIvU291
cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCmluZGV4IDBmZGM0OWM3ZGFiYjRjYWJmMGEw
MTliMmRiMGU4YWIwNDkwNWQ4YTQuLjQ0NDgzMzhmZmViYzljM2YyZjk4NjhhOTE0MGQxYjAyN2Mx
ZDdhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkKQEAgLTY0LDEwICs2NCwxMCBAQCBW
UEFUSCA9IFwKIAogTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgQXV0aGVudGljYXRpb25NYW5h
Z2VyLm1lc3NhZ2VzLmluIFwKKyAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNz
YWdlcy5pbiBcCiAgICAgRG93bmxvYWRQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0Fy
ZWFQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgRXZlbnREaXNwYXRjaGVyLm1lc3NhZ2VzLmluIFwK
LSAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5D
b250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gXAogICAgIFBsdWdpblByb2Nlc3MubWVzc2FnZXMu
aW4gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIFwKQEAgLTk4LDgg
Kzk4LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViTm90aWZpY2F0aW9uTWFuYWdl
ci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4gXAog
ICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gXAorICAgIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbiBcCiAgICAgRHJhd2luZ0FyZWEubWVzc2FnZXMu
aW4gXAotICAgIExheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluIFwKICAgICBXZWJJbnNw
ZWN0b3IubWVzc2FnZXMuaW4gXAogICAgIFdlYlBhZ2UubWVzc2FnZXMuaW4gXAogICAgIFdlYlBh
Z2VHcm91cFByb3h5Lm1lc3NhZ2VzLmluIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL01lc3NhZ2VJRC5oCmluZGV4IGZhNzBkNTU3NzM1OWU3Nzc0ZDEyMDc3ZTJmY2U2Njk2MDYz
YzljZWIuLmVkNjNkNTQ3OWVmZDNiMTMyYWQ2OTlhMzhkOTBiNDllY2UzNWJmMDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaApAQCAtMzYsOCArMzYsOCBA
QCBlbnVtIE1lc3NhZ2VDbGFzcyB7CiAKICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSBVSSBw
cm9jZXNzIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KICAgICBNZXNzYWdlQ2xhc3NBdXRoZW50aWNhdGlv
bk1hbmFnZXIsCisgICAgTWVzc2FnZUNsYXNzQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LAogICAg
IE1lc3NhZ2VDbGFzc0RyYXdpbmdBcmVhLAotICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3Jk
aW5hdG9yLAogICAgIE1lc3NhZ2VDbGFzc1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLAogICAg
IE1lc3NhZ2VDbGFzc1dlYkJhdHRlcnlNYW5hZ2VyUHJveHksCiAgICAgTWVzc2FnZUNsYXNzV2Vi
Q29va2llTWFuYWdlciwKQEAgLTYwLDkgKzYwLDkgQEAgZW51bSBNZXNzYWdlQ2xhc3MgewogI2Vu
ZGlmCiAKICAgICAvLyBNZXNzYWdlcyBzZW50IGJ5IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgVUkg
cHJvY2Vzcy4KKyAgICBNZXNzYWdlQ2xhc3NDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSwK
ICAgICBNZXNzYWdlQ2xhc3NEb3dubG9hZFByb3h5LAogICAgIE1lc3NhZ2VDbGFzc0RyYXdpbmdB
cmVhUHJveHksCi0gICAgTWVzc2FnZUNsYXNzTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSwKICAg
ICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5LAogICAgIE1lc3Nh
Z2VDbGFzc1dlYkJhdHRlcnlNYW5hZ2VyLAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvbm5lY3Rpb24s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIv
VGFyZ2V0LnByaQppbmRleCAwNDdkMTcwN2NhMzM1MGJkOWYxYTMwNGM2YjdhZTllOTA4YmRkMWI0
Li41ODMzODk2YTgxMTAwZGM0NGFiODEwMWEwMTM3NGFjNDk0ZWNmZTUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
QEAgLTIxMSw3ICsyMTEsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0
b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oIFwKICAgICBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwK
LSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmggXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmggXAogICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIu
aCBcCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBcCkBAIC0zNzQsOCArMzc0LDgg
QEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCisgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkVGlsZS5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uv
VGFwSGlnaGxpZ2h0Q29udHJvbGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92
ZXJsYXkuaCBcCkBAIC01NzEsNyArNTcxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNz
L0JhY2tpbmdTdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9CYWNraW5nU3RvcmVRdC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0
b3JlLmNwcCBcCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvRGVmYXVs
dFVuZG9Db250cm9sbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFBy
b3h5LmNwcCBcCkBAIC03NjAsOCArNzYwLDggQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCisgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCi0g
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRp
bmF0b3IuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9V
cGRhdGVBdGxhcy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250
cm9sbGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcApp
bmRleCA1MjdlOTA3NzdiYTIxM2ZlZmZmOGQ1MzBhNTMwYWM4NTk2YWU5NmIwLi5lOTA1MWUyNjgx
YTMxNjRkZWMzOGFiOTc1ZDY5MzE5NGIwZGFkOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCkBAIC0yMiwxMSArMjIsMTEgQEAKICNp
bmNsdWRlICJFd2tWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnRFZmwu
aCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUg
IkVmbFNjcmVlblV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNpbmNs
dWRlICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIkxheWVy
VHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEJhc2UuaCIKICNpbmNsdWRlICJQ
YWdlQ2xpZW50RGVmYXVsdEltcGwuaCIKQEAgLTM1MSwxMSArMzUxLDExIEBAIExheWVyVHJlZVJl
bmRlcmVyKiBFd2tWaWV3SW1wbDo6bGF5ZXJUcmVlUmVuZGVyZXIoKQogICAgIGlmICghZHJhd2lu
Z0FyZWEpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgV2ViS2l0OjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gZHJhd2luZ0FyZWEtPmxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBpZiAoIWxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkpCisgICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkoKTsKKyAgICBpZiAoIWNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBsYXllclRyZWVDb29yZGluYXRvclByb3h5LT5s
YXllclRyZWVSZW5kZXJlcigpOworICAgIHJldHVybiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBlNWYzZDNlZDQ3
NDBmZTAyZjUxZDUxZTFlNWU2MGUzMDFjYTAwNjBkLi40YTVkMjE3M2Y3NmNkNjAyYWUwM2I3ZGYx
MTgxODBjZjZkZTdhNGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKIAotI2luY2x1ZGUgIkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdl
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2RlLmgiCkBAIC03MCw5ICs3
MCw5IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVy
KQogICAgIGlmICghd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclBy
b3h5ID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVDb29yZGluYXRvclBy
b3h5KCk7Ci0gICAgaWYgKGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRl
cmVyKCkpCi0gICAgICAgIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPmxheWVyVHJlZVJlbmRl
cmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gd2ViUGFn
ZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwor
ICAgIGlmIChjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIo
KSkKKyAgICAgICAgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJlbmRl
cmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CiB9CiAKIFFTR05vZGUqIFFR
dWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWlu
dE5vZGVEYXRhKikKQEAgLTgwLDggKzgwLDggQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6dXBk
YXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQogICAg
IGlmICghZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gb2xk
Tm9kZTsKIAotICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoKTsKLSAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRy
ZWVDb29yZGluYXRvclByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGQtPndl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHko
KTsKKyAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBjb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKIAogICAgIFF0V2ViUGFnZVNHTm9kZSog
bm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9kZSo+KG9sZE5vZGUpOwogICAgIGlmICgh
bm9kZSkKQEAgLTE1Niw4ICsxNTYsOCBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRh
dGVTaXplKCkKICAgICBRU2l6ZUYgc2NhbGVkU2l6ZSA9IGNvbnRlbnRzU2l6ZSAqIGNvbnRlbnRz
U2NhbGU7CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94
eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKSkKLSAgICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkoKS0+c2V0Q29udGVudHNTaXplKFdlYkNvcmU6OkZsb2F0U2l6ZShj
b250ZW50c1NpemUpKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkpCisgICAgICAgIGRyYXdpbmdBcmVhLT5jb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRT
aXplKGNvbnRlbnRzU2l6ZSkpOwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3Bw
CmluZGV4IDNmOWMzYjJhZTNiZTk4YzFhZGE0NTliYzNmYWVjMWI0Njg5ODhkOGYuLjJkZDQ1ZDBl
ZmZlOWUwZjNmZmJhZDM2NDlkMzBlOTU3NmZiZjlkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKQEAgLTIwLDkgKzIwLDkg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19wLmgiCiAKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkN1cnNv
ci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1v
dXNlRXZlbnQuaCIKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpzZXRTaXpl
KGNvbnN0IFFTaXplJiBzaXplKQogICAgIGlmIChkLT5tX3dlYlBhZ2VQcm94eS0+dXNlRml4ZWRM
YXlvdXQoKSkKICAgICAgICAgZC0+bV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZShzaXpl
KTsKICAgICBlbHNlIHsKLSAgICAgICAgV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
KiBjb29yZGluYXRvciA9IGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7
CisgICAgICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5h
dG9yID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CiAgICAg
ICAgIGlmICghY29vcmRpbmF0b3IpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvb3Jk
aW5hdG9yLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSkpOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgV2ViS2l0OjpMYXllclRyZWVS
ZW5kZXJlciogUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKICAgICBXZWJL
aXQ6OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gZC0+bV93ZWJQYWdlUHJveHktPmRy
YXdpbmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRv
clByb3h5ID0gZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBp
ZiAoIWxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgV2ViS2l0OjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5n
QXJlYS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICBpZiAoIWNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4g
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiB9CiAK
IHZvaWQgUVJhd1dlYlZpZXc6OnBhaW50KGNvbnN0IFFNYXRyaXg0eDQmIHRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSwgdW5zaWduZWQgcGFpbnRGbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFiZWJhMGY3
MWVmMTYyNGJiODgwNjgyYjBlN2ZlYjA5NGY2NWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+
CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQorICAg
IDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCisgICAgLCBtX3JlbmRlcmVy
KGFkb3B0UmVmKG5ldyBMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCisgICAgLCBtX2xhc3RTZW50
U2NhbGUoMCkKK3sKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6On5Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSgpCit7CisgICAgbV9yZW5kZXJlci0+ZGV0YWNoKCk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkK
K3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShm
dW5jdGlvbik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGls
ZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgU3VyZmFj
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lEKTsK
KyAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxh
eWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51
cGRhdGVSZWN0LCB0aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQp
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVG
b3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorewor
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBt
X3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFt
X3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lE
LCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQp
Cit7CisgICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3Vy
ZmFjZXMucmVtb3ZlKGF0bGFzSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIs
IG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
K3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExh
eWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVy
SUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVy
LmdldCgpLCBpZCwgaW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVu
ZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXll
ckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5k
aWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNv
cmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Cit9CisjZW5kaWYKKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3Zl
cmVkUmVjdCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
Zmx1c2hMYXllckNoYW5nZXMsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKKyAgICB1cGRhdGVWaWV3cG9y
dCgpOworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRlbnRzU2l6ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNv
dmVyZWRSZWN0KTsKKyNlbmRpZgorfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJ
bWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmIGhhbmRsZSkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3JlbmRlcmVyLmdldCgp
LCBpbWFnZUlEKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFj
a2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250
ZW50c1NpemUpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhD
b29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmlt
YXRpb25zKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllckFuaW1hdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2Nr
ZWQoYm9vbCBsb2NrZWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldEFuaW1hdGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBh
ZGp1c3Qgdmlld3BvcnQtZml4ZWQgbGF5ZXJzLgorICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgp
LCByZWN0KSk7CisKKyAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2Nh
bGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRy
YWplY3RvcnlWZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rv
ciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgbV9sYXN0U2Vu
dFZpc2libGVSZWN0ID0gcmVjdDsKKyAgICBtX2xhc3RTZW50U2NhbGUgPSBzY2FsZTsKKyAgICBt
X2xhc3RTZW50VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3RvcnlWZWN0b3I7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmlt
YXRpb25GcmFtZSgpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OnJlcXVlc3RBbmltYXRpb25GcmFtZSwgbV9yZW5kZXJlci5nZXQoKSkpOworICAgIHVwZGF0
ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmFu
aW1hdGlvbkZyYW1lUmVhZHkoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5w
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6QW5pbWF0
aW9uRnJhbWVSZWFkeSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwor
fQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
biwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKK30KKworI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3Qg
R3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6Rmxh
Z3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQg
fCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFj
ZUZsYWdzLCB0b2tlbikpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVy
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2Fu
dmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZnJvbnRCdWZmZXIpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRl
c3Ryb3lDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisjZW5kaWYKKwordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAg
ICBtX3N1cmZhY2VzLmNsZWFyKCk7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJh
Y2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0QmFja2dyb3VuZENvbG9yLCBtX3JlbmRlcmVyLmdldCgp
LCBjb2xvcikpOworfQorCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2NhODk2MTJlZGUzMzgxMTY4ZWJmNDY0YWRjOWVjNzM3ZDBhNDU4ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlfaAor
I2RlZmluZSBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eV9oCisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJD
b29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZExheWVySW5mby5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJS
ZWdpb24uaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNv
b3JkaW5hdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZh
Y2VUb2tlbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGltZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZExh
eWVySW5mbzsKK2NsYXNzIExheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgQ29vcmRpbmF0ZWRMYXll
clVwZGF0ZUluZm87CisKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOworICAgIH5Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0
YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAg
ICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CisjaWYgRU5BQkxFKENTU19GSUxURVJT
KQorICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwg
Y29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorICAgIHZvaWQgZGVsZXRlQ29t
cG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgc2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOworICAgIHZvaWQgZGlkUmVuZGVyRnJh
bWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBjb3ZlcmVkUmVjdCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBj
b25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXll
cihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVV
cGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmKTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKKyAgICB2b2lk
IGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lk
IHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbios
IENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICB2b2lk
IHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lk
IGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZUNhbnZhcyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOworICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEKTsKKyNlbmRpZgorICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVz
KCk7CisgICAgTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMm
KTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CisjaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7Cisg
ICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CisjZW5kaWYKKyAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3aW5n
QXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPExheWVyVHJlZVJlbmRl
cmVyPiBtX3JlbmRlcmVyOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJs
ZVJlY3Q7CisgICAgZmxvYXQgbV9sYXN0U2VudFNjYWxlOworICAgIFdlYkNvcmU6OkZsb2F0UG9p
bnQgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCAv
KiBhdGxhc0lEICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+IFN1cmZhY2VNYXA7Cisg
ICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VzOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8v
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTY3ODk4OTA0MmQwMGFlZmNjYjA5MDQyODMxY2JhY2NmYzgzYWIzOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTkgQEAK
KyMKKyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCittZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB7CisgICAg
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJJbmZvIGxheWVySW5mbykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWlu
dDMyX3QgaWQsIFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zIGZpbHRlcnMpCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgQ3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvIHByb2dyYW1JbmZvKQorICAgIFJlbW92ZUN1c3RvbUZpbHRlclBy
b2dyYW0oaW50IGlkKQorI2VuZGlmCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMy
X3QgaWQpCisgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVh
dGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3Jl
OjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8p
CisgICAgVXBkYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1
cGRhdGVJbmZvKQorICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQpCisgICAgQ3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIFdlYktpdDo6
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQorICAgIFJlbW92ZVVwZGF0ZUF0
bGFzKGludCBhdGxhc0lEKQorICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlE
KQorICAgIFVwZGF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJLaXQ6OldlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKKyAgICBDbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzKHVpbnQ2NF90IGltYWdlSUQpCisgICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90
IGltYWdlSUQpCisgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1Np
emUsIFdlYkNvcmU6OkludFJlY3QgY292ZXJlZFJlY3QpCisgICAgRGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbikKKyAgICBTZXRMYXllckFuaW1hdGlv
bnModWludDMyX3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlv
bnMpCisgICAgU2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKKworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQorI2Vu
ZGlmCisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBDcmVhdGVDYW52YXModWludDMy
X3QgaWQsIFdlYkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJm
YWNlVG9rZW4gdG9rZW4pCisgICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpCisgICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKKyNlbmRpZgorCisgICAg
U2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXll
clRyZWVDb29yZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2ZWIxNDkzYWQxYWE4MjBiNjYxNmI3MDQ3NjhhM2Y1YWU3YmY0
MzE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCi0KLSNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVySW5mby5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9y
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgotI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNl
Lmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1f
ZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9w
dFJlZihuZXcgTGF5ZXJUcmVlUmVuZGVyZXIodGhpcykpKQotICAgICwgbV9sYXN0U2VudFNjYWxl
KDApCi17Ci19Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGlu
YXRvclByb3h5KCkKLXsKLSAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgbV9kcmF3aW5n
QXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQotewotICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxl
LCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0
b3IpKTsKLSAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwg
dXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRl
VGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQotewotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNl
cy5maW5kKHVwZGF0ZUluZm8uYXRsYXNJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMu
ZW5kKCkpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRh
dGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRl
cmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGlsZVJlY3QsIGl0LT52YWx1
ZSwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVVcGRhdGVBdGxh
cyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRs
ZSkKLXsKLSAgICBBU1NFUlQoIW1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1f
c3VyZmFjZXMuYWRkKGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRs
ZSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVVwZGF0ZUF0
bGFzKGludCBhdGxhc0lEKQotewotICAgIEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFz
SUQpKTsKLSAgICBtX3N1cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
ZGVsZXRlTGF5ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9yZW5k
ZXJlci5nZXQoKSwgaWQsIGluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVu
ZGVyZXIuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJT
KQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmls
dGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyRmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJl
ci5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
b250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdl
cywgbV9yZW5kZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0jaWYgVVNFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJl
bmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oY29udGVudHNTaXplKTsKLSAgICBVTlVTRURfUEFSQU0oY292ZXJlZFJlY3QpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRl
cmVyLmdldCgpLCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwg
Y29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nLCBt
X3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZSho
YW5kbGUpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHMsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUo
Y29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwg
Y29udGVudHNTaXplKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0
TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQW5pbWF0aW9ucywgbV9yZW5kZXJlci5nZXQoKSwgaWQs
IGFuaW1hdGlvbnMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRB
bmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgp
LCBsb2NrZWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gSW5mb3JtIHRoZSByZW5k
ZXJlciB0byBhZGp1c3Qgdmlld3BvcnQtZml4ZWQgbGF5ZXJzLgotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRl
cmVyLmdldCgpLCByZWN0KSk7Ci0KLSAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJl
Y3QgJiYgc2NhbGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9s
YXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yOjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5
VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLSAgICBtX2xh
c3RTZW50VmlzaWJsZVJlY3QgPSByZWN0OwotICAgIG1fbGFzdFNlbnRTY2FsZSA9IHNjYWxlOwot
ICAgIG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yID0gdHJhamVjdG9yeVZlY3RvcjsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAg
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Okxh
eWVyVHJlZUNvb3JkaW5hdG9yOjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5
LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZy
YW1lKCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVx
dWVzdEFuaW1hdGlvbkZyYW1lLCBtX3JlbmRlcmVyLmdldCgpKSk7Ci0gICAgdXBkYXRlVmlld3Bv
cnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjphbmltYXRpb25GcmFt
ZVJlYWR5KCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6QW5pbWF0aW9uRnJhbWVSZWFkeSgp
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotI2VuZGlmCi0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdldCgp
LCBwb3NpdGlvbikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0
b2tlbikKLXsKLSAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBo
aWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBw
b3J0c1NoYXJpbmc7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNz
U3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4pKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwg
ZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0
cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwg
aWQpKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdl
QmFja2luZ1N0b3JlcygpCi17Ci0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yOjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1f
cmVuZGVyZXIuZ2V0KCksIGNvbG9yKSk7Ci19Ci0KLX0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjYxYjNmZWMxZDQ2ODA0ZGI2MGM0
N2YwZTVjZDcyM2U2NGUyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9o
Ci0jZGVmaW5lIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRM
YXllckluZm8uaCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUmVn
aW9uLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb29y
ZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNl
VG9rZW4uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ludFNpemUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRMYXll
ckluZm87Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJV
cGRhdGVJbmZvOwotCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMYXllclRyZWVDb29yZGluYXRvclByb3h5KTsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAgICB+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0
aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAg
dm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dy
YW0oaW50IGlkKTsKLSNlbmRpZgotICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihDb29y
ZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRp
bmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmKTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVj
dCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lkIHJl
bW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6
OkhhbmRsZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
clByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAg
ICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRp
b24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pOwotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2Vu
Jik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOwot
I2VuZGlmCi0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBMYXllclRyZWVSZW5k
ZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgp
OyB9Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0
aW9uc0xvY2tlZChib29sKTsKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0g
ICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1l
UmVhZHkoKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNv
cmU6OkNvbG9yJik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0Fy
ZWFQcm94eTsKLSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKLSAgICBmbG9hdCBtX2xh
c3RTZW50U2NhbGU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9y
eVZlY3RvcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+ID4gU3VyZmFjZU1hcDsKLSAgICBTdXJmYWNlTWFwIG1fc3VyZmFj
ZXM7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlMTdkYWZj
OGZjZTBlNjgxNWMyYTgyMmJmNTFjMTE4NjE4NWFjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2
L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwg
V2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1
aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKLSAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJvb3RDb21w
b3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIodWlu
dDMyX3QgaWQpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKGlu
dCBhdGxhc0lELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkK
LSAgICBSZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLSAgICBDcmVhdGVJbWFnZUJhY2tp
bmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1h
Z2VJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAg
Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFJlbW92ZUlt
YWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQotICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6
OkludFNpemUgY29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAg
IERpZENoYW5nZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCi0g
ICAgU2V0TGF5ZXJBbmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyBhbmltYXRpb25zKQotICAgIFNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2Nr
ZWQpCi0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgUmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCkKLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAg
Q3JlYXRlQ2FudmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXplIGNhbnZhc1NpemUsIFdl
YkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuKQotICAgIFN5bmNDYW52YXModWludDMy
X3QgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQotICAgIERlc3Ryb3lDYW52YXModWludDMyX3Qg
aWQpCi0jZW5kaWYKLQotICAgIFNldEJhY2tncm91bmRDb2xvcihXZWJDb3JlOjpDb2xvciBjb2xv
cikKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDYz
NDFkMzU1YmZlODcxN2NmYzAxNmQwOWFlNmNhZTE5ZjQ4Yzk0YjUuLjdjNjM0NTI4OGEzZWI5MzM3
Y2RjZmU0NjI1OWNmZDQ0NmE5OGNkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHAKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgog
CiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1
ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCkBAIC03MSw4ICs3MSw4IEBAIHN0YXRpYyBib29s
IGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBsYXllcikKICAgICBy
ZXR1cm4gbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVyLT5jb250ZW50c0FyZVZpc2libGUo
KSAmJiAhbGF5ZXItPnNpemUoKS5pc0VtcHR5KCk7CiB9CiAKLUxheWVyVHJlZVJlbmRlcmVyOjpM
YXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29y
ZGluYXRvclByb3h5KQotICAgIDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkpCitMYXllclRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVlUmVuZGVyZXIo
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KQorICAgIDogbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShjb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiAgICAgLCBtX3Jvb3RM
YXllcklEKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCiAgICAgLCBtX2FuaW1hdGlvbnNMb2Nr
ZWQoZmFsc2UpCkBAIC0xNTQsOCArMTU0LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHIKIHZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkK
LSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5hbmltYXRpb25GcmFtZVJlYWR5
KCk7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1f
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKIH0K
IAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKQEAgLTIw
MCw4ICsyMDAsOCBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0
ZVZpZXdwb3J0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS0+dXBkYXRlVmlld3BvcnQoKTsKKyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSkKKyAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRl
Vmlld3BvcnQoKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25G
b3JGaXhlZExheWVycygpCkBAIC02MDksOCArNjA5LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6Zmx1c2hMYXllckNoYW5nZXMoKQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJO
ZXh0RnJhbWUoKQogewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAg
aWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOwogfQogCiB2b2lkIExheWVy
VHJlZVJlbmRlcmVyOjplbnN1cmVSb290TGF5ZXIoKQpAQCAtNjc0LDggKzY3NCw4IEBAIHZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQogCiB2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQogewotICAgIGlmIChtX2xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VC
YWNraW5nU3RvcmVzKCk7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkp
CisgICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnB1cmdlQmFja2luZ1N0
b3JlcygpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5p
bWF0aW9ucykKQEAgLTcwNSw3ICs3MDUsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRB
bmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGV0
YWNoKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSA9IDA7CisgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9
IDA7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmlu
ZGV4IGE2NzIyNzQwOWU3ZjAwZmVjYzAwNzMxNzZlMWZlZDBkN2M4NTVmYjUuLjY5YjgxYTQ5YmJi
MTE0NzU1NjA0YjdhYmRjYzIxYTU4ZWU1NDc0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuaApAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7Ci1jbGFzcyBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk7CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNsYXNzIENvb3JkaW5hdGVkTGF5
ZXJVcGRhdGVJbmZvOwogCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgfTsKLSAgICBleHBsaWNpdCBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVD
b29yZGluYXRvclByb3h5Kik7CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVuZGVyZXIoQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVSZW5kZXJl
cigpOwogICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOwogICAgIHZvaWQgcGFpbnRUb0dy
YXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKQEAg
LTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBl
bmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogCi0gICAgLy8gVGhlIHBhaW50aW5n
IHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIHVzZSBiZWxvdyB0d28gbWV0aG9k
cywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVycyB0aGF0IHRoZSBtYWluIHRocmVh
ZCBtYW5hZ2VzLiBTZWUgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LgorICAgIC8vIFRoZSBw
YWludGluZyB0aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byB1c2UgYmVsb3cgdHdv
IG1ldGhvZHMsIGJlY2F1c2UgdHdvIG1ldGhvZHMgYWNjZXNzIG1lbWJlcnMgdGhhdCB0aGUgbWFp
biB0aHJlYWQgbWFuYWdlcy4gU2VlIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuCiAg
ICAgLy8gQ3VycmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0
aGUgbWFpbiB0aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgogICAgIHZvaWQgcHVy
Z2VHTFJlc291cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwpAQCAtMTc1LDcgKzE3
NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIC8vIEJlbG93IHR3byBtZW1iZXJzIGFyZSBh
Y2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0
IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3RoIG1lbWJlcnMuCi0gICAgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eSogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OworICAgIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OwogICAgIGJvb2wgbV9pc0FjdGl2ZTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBtX3Jvb3RMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcAppbmRleCA5MDBkNmE1ODgyZmYyNDk4MjdiNjA0MmZmNTNiMDZlNzUzZTY3
ZmFmLi4wN2VhYTNhYzM1MjM5OGM3YzBjODk4NTNkN2M4NGEzMjA1Y2NiOTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOSw3ICsyOSw3
IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSA8Q29yZUlQQy9NZXNz
YWdlSUQuaD4KICNlbmRpZgogCkBAIC02OSw3ICs2OSw3IEBAIFdlYkNvcmU6OkludFJlY3QgRHJh
d2luZ0FyZWFQcm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBtX3dlYlBhZ2VQcm94eS0+dmlld1NpemUoKSk7CiB9CiAKLXZvaWQg
RHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJikKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVjZWl2ZUNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQ
Qzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCiB7CiB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGQ2Nzk5ZGQ1
YmU5MGJiYTMyYzEzZTE3OTVhZTUxNDNmMDFmOWVjMDYuLjFlYjE4MTk1MWIwYmViZDA4MTU4N2M5
YWNjODRiN2EyNDVlM2M0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdB
cmVhUHJveHkuaApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk7CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsKIGNs
YXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKQEAgLTg1LDkgKzg1LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gY29u
dGVudHNSZWN0KCk7IH0KICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNSZWN0
KCkgY29uc3Q7Ci0gICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5n
ZXQoKTsgfQorICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIC8qIHZpc2libGVDb250ZW50c1JlY3QgKi8sIGZs
b2F0IC8qIHNjYWxlICovLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiAvKiB0cmFqZWN0b3J5
VmVjdG9yICovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdl
SUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKIAogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5OyB9CiAjZW5kaWYK
QEAgLTEwMSw3ICsxMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Nj
cm9sbE9mZnNldDsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBPd25QdHI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eT4gbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5Owor
ICAgIE93blB0cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4gbV9jb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggMTM4ZjRjODg3MGI5
OTgwZjY1MDc3YWI4MmVmOTViMjRmNzk1YzFmZi4uNGNiMzRhNDJmNDhlYzViOWNjZGRhZWIwNjcz
YjA0Y2M2NGYyMGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZWdpb24uaD4KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJMYXll
clRyZWVDb29yZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuaCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYxLDcg
KzYxLDcgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKFdlYlBh
Z2VQcm94eSogd2ViUGFnZVByb3h5KQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAg
ICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNl
bnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYg
KHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRp
bmdNb2RlKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRy
KG5ldyBMYXllclRyZWVDb29yZGluYXRvclByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9jb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSh0aGlzKSk7CiAjZW5kaWYKIH0KIApAQCAtMzYwLDIyICszNjAsMjIgQEAgdm9p
ZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShj
b25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVD
b250ZXh0OwogICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGxheWVyVHJlZUNvbnRleHQpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAg
ICBpZiAoIW1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVD
b29yZGluYXRvclByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
dGhpcykpOworICAgIGlmICghbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAg
ICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CiAjZW5kaWYKIH0KIAogI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVM
YXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25u
ZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29u
bmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURl
Y29kZXImIGRlY29kZXIpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkK
LSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5kaWRSZWNlaXZlTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsK
KyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9jb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwogfQogCiB2
b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclBy
b3h5LT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlLCB0
cmFqZWN0b3J5VmVjdG9yKTsKKyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSkKKyAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuaAppbmRleCBmZTA1MTBlZjg2MWQ0Zjk2ZjEwMGJlZmYyNWNiMmYwZjkxNzRlMGE3
Li42Y2VkMjA3YjRjYzY5OGI3ZDJhNWMzZjZhMmI3ZGEzY2JiYjIxZmNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtMzksNyArMzks
NyBAQCBjbGFzcyBSZWdpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7
CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkg
ewogcHVibGljOgpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZs
b2F0IHNjYWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKLSAgICB2
b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYp
OworICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwogI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMTQwNmIzYjRhN2JhMTY2ZGYwNzc4Y2RhZWQ2
OGE5NDYwOTk4ZDAzNy4uZTQxODk1Nzk0OTA4MTk0NGM2N2ZiMjU0Yjg1NDZlMWRkZTRjYWE4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk2LDcgKzk2
LDcgQEAKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUg
IkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
UVQpCkBAIC0xODYyLDggKzE4NjIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgIH0K
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobWVzc2FnZUlELmlzPENv
cmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk+KCkpIHsKLSAgICAg
ICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNz
YWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAgaWYgKG1lc3NhZ2VJRC5p
czxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4oKSkg
eworICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlQ2xpZW50QmFzZS5jcHAKaW5kZXggYjkzNDYzNDZjMzZjMzQ2ZmI5NWUyNGI4MzJjYTYy
ZTc3YjIyZDEyMC4uMjczZDA2NDZmOTU1NjI5M2ZjZWUxZWRmMWQ0NjdmNmI5NTZkZDZiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAg
LTI2LDEwICsyNiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VDbGll
bnRCYXNlLmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgog
I2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiRXdrVmlld0ltcGwu
aCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJMYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dExlZ2FjeUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50
TGVnYWN5SW1wbC5jcHAKaW5kZXggZTU2Njg3NTZkODViYWFjODlhZjg3YmY1Y2Y1OTBhNTUxMTNm
YzlmYi4uMTU3MGJjOTk3ZTRkOTE2MWRhMzllMjM0ZWM3OTU1YTQ4OGI0NzM4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5j
cHAKQEAgLTI3LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdl
Q2xpZW50TGVnYWN5SW1wbC5oIgogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKICNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
ImV3a192aWV3LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1w
bDo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXQK
IHZvaWQgUGFnZUNsaWVudExlZ2FjeUltcGw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQot
ICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eSgpLT5zZXRDb250ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkpOworICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+Y29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKEZsb2F0U2l6ZShzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKICAgICBtX3ZpZXdJbXBsLT51cGRhdGUoKTsKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAppbmRleCAwNzQ2ZjY1ZDkyN2Zh
MWQ2MjRmNGQ3NDMwOWVhOTU4OTJhMTQ1NTdmLi5kMTRjNGVkNGI4OWJmYmZkM2YzZDQ2Yjk3MzYw
MWY5YTA0NTI4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTI4LDgg
KzI4LDggQEAKIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgot
I2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJMYXllclRy
ZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtNTYsNyArNTYsNyBAQCBEcmF3aW5nQXJl
YVByb3h5KiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkcmF3aW5nQXJlYSgpIGNv
bnN0CiAKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0UmVuZGVyZXJB
Y3RpdmUoYm9vbCBhY3RpdmUpCiB7Ci0gICAgZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKKyAg
ICBkcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRy
ZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmll
d3BvcnRTaXplKQpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OnVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3cG9ydAogCiB2
b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUpCiB7Ci0gICAgZHJhd2luZ0Fy
ZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5zZXRDb250ZW50c1NpemUoY29udGVu
dHNTaXplKTsKKyAgICBkcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSgpLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsKICAgICBtX3ZpZXdJbXBsLT51cGRh
dGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllci5jcHAKaW5kZXggZDBlOWM2ZDMyYjY3MWQ3YTE1ZDQ0OGI3MDBlMTY0
N2EzOGFlM2ZlYy4uNTZjZDAwMjQzM2U0M2QwY2E0Yjk2OWUxMjAyNWVkYjZiZjIwNmI3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZFRpbGUuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wM2EyMTZmMzI0MGU1MzUxZTY0ZDlmMjNhMDU3NTk4ZGMwNzkwYWEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDgzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBk
YXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUg
IldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXJCYWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1NldHRpbmdzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oPgorI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5j
bHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjZW5kaWYKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUo
V2ViUGFnZSogd2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKSk7Cit9CisKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpCit7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOworI2VuZGlmCisKKyAgICAvLyBQ
cmV2ZW50IHNldENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXll
cigpIGZyb20gbW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBIYXNo
U2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7
CisgICAgcmVnaXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBI
YXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQg
PSByZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnNldENvb3JkaW5hdG9yKDAp
OworfQorCitDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dChXZWJQYWdlKiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwg
bV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQo
dHJ1ZSkKKyAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQorICAgICwgbV93YWl0aW5nRm9yVUlQcm9j
ZXNzKHRydWUpCisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1Nj
YWxlKDEpCisgICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAg
ICwgbV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29t
cG9zaXRpbmdMYXllcihmYWxzZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9yZWxl
YXNlSW5hY3RpdmVBdGxhc2VzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZCh0cnVlKQorICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQo
MCkKKyAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKK3sKKyAgICAvLyBDcmVhdGUgYSBy
b290IGxheWVyLgorICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMs
IHRoaXMpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5
ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAg
Y29vcmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCByb290
IGxheWVyIik7CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsKKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9s
YXllclRyZWVDb250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKGNvb3JkaW5hdGVkUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Cisg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgp
KTsKKworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAg
ICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1
bGluZ0VuYWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVz
aGluZ0VuYWJsZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsK
KyAgICAgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVz
aFNjaGVkdWxpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJG
bHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRp
bmdMYXllckZsdXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hl
ZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQorewor
ICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikK
K3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dl
YlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRC
YWNrZ3JvdW5kKCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhp
ZXJhcmNoeS4KKyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXll
ckZsdXNoKCk7CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51
bGxwdHI7CisgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xsT2Zmc2V0
ICovKQoreworICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJl
Y3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkK
K3sKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNp
bmNlIGluIHRoaXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJl
cGx5IG5pY2VseS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VS
ZXBhaW50LiBCdXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24g
Y2FsbGJhY2tzIGJlaW5nIGV4ZWN1dGVkLgorICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAg
IC8vIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3Jj
ZWQgcGFpbnQgbWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCisgICAgLy8gVGhp
cyBpcyBhbGlnbmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgorICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworICAgIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworfQorCitib29sIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkK
K3sKKyAgICAvLyBXZSBleHBlY3QgdGhlIFVJIHByb2Nlc3MgdG8gbm90IHJlcXVpcmUgYSBuZXcg
cmVwYWludCB1bnRpbCB0aGUgcHJldmlvdXMgb25lIGhhcyBmaW5pc2hlZC4KKyAgICBBU1NFUlQo
IW1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5j
Q2FsbGJhY2tJRCA9IGNhbGxiYWNrSUQ7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlk
Q2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9v
dExheWVyLT5zaXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290
TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2Vz
IG5ldyBhcmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxh
eSBpcyBuZWVkZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBG
bG9hdFNpemUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwor
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAg
IGlmIChuZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQg
aGVpZ2h0ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBv
bGRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6
ZS53aWR0aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAo
bmV3U2l6ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRT
aXplLmhlaWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXpl
LmhlaWdodCgpKSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3Bh
Z2VPdmVybGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1
c2goKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEluc3RhbGxQYWdl
T3ZlcmxheSgpCit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxl
TGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkVW5p
bnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7Cisg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpzZXRQYWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJs
YXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJs
YXlPcGFjaXR5KGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIp
OworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVz
aFBlbmRpbmdMYXllckNoYW5nZXMoKQoreworICAgIGlmIChtX3dhaXRpbmdGb3JVSVByb2Nlc3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcklmTmVlZGVkKCk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVy
bGF5TGF5ZXIpCisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5j
b3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNs
dWRpbmdTdWJmcmFtZXMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXplKCk7
ICsraSkKKyAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihtX2RldGFjaGVkTGF5ZXJzW2ld
KSk7CisgICAgbV9kZXRhY2hlZExheWVycy5jbGVhcigpOworCisgICAgaWYgKG1fc2hvdWxkU3lu
Y0ZyYW1lKSB7CisgICAgICAgIGRpZFN5bmMgPSB0cnVlOworCisgICAgICAgIEludFNpemUgY29u
dGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5z
aXplKCkpOworICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7
CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OkRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAg
ICAgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5j
RnJhbWUgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOwor
CisgICAgaWYgKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrSUQpKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxi
YWNrSUQgPSAwOworICAgIH0KKworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVk
ZWQoKQoreworICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAgbV9kaWRJbml0
aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0
YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGlu
Zm8pCit7CisgICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlv
bigpKSk7CisgICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7
CisgICAgfQorCisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0
aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit7CisgICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4p
KTsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5
ZXIqIGNhbnZhc1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+
Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQ
bGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNhbnZhcyhpZCwg
Y2FudmFzU2l6ZSwgdG9rZW4pKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQ
bGF0Zm9ybUxheWVyKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICB1aW50
MzJfdCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3Vy
ZmFjZSgpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Cit9CisjZW5kaWYK
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMo
ZmlsdGVycyk7CisjZW5kaWYKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmls
dGVycykpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRl
IHRoZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgb2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRv
IHNlcmlhbGl6ZSB0aGUKKyAgICAvLyBjdXN0b20gZmlsdGVycyB0byB0aGUgb3RoZXIgcHJvY2Vz
cy4gVGhhdCdzIGJlY2F1c2UgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG5lZWRzCisgICAg
Ly8gdG8gbGluayBiYWNrIHRvIHRoZSBjb29yZGluYXRvciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBh
IG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3Mgd2hlbgorICAgIC8vIHRoZSBwcm9ncmFtIGlzIG5v
dCBuZWVkZWQgYW55bW9yZS4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIHNlcmlhbGl6YXRpb24gd2ls
bCBvbmx5IGhhcHBlbiBhdCBhIGxhdGVyIHRpbWUgaW4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zPjo6ZW5jb2RlLgorICAgIC8vIEF0IHRoYXQgcG9pbnQgdGhlIHByb2dy
YW0gd2lsbCBvbmx5IGJlIHNlcmlhbGl6ZWQgb25jZS4gQWxsIHRoZSBvdGhlciB0aW1lcyBpdCB3
aWxsIG9ubHkgdXNlIHRoZSBJRCBvZiB0aGUgcHJvZ3JhbS4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0
aW9uKiBvcGVyYXRpb24gPSBmaWx0ZXJzLmF0KGkpOworICAgICAgICBpZiAob3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGN1c3Rv
bU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT5pc0luaXRpYWxpemVkKCkpOworICAgICAg
ICBUZXh0dXJlTWFwcGVyUGxhdGZvcm1Db21waWxlZFByb2dyYW0qIHByb2dyYW0gPSBjdXN0b21P
cGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+cGxhdGZvcm1Db21waWxlZFByb2dyYW0oKTsK
KworICAgICAgICBSZWZQdHI8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHk7CisgICAgICAgIGlmIChwcm9ncmFtLT5jbGllbnQoKSkKKyAgICAgICAg
ICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eSo+KHByb2dyYW0tPmNsaWVudCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHk6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMpOworICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+
dmFsaWRhdGVkUHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVk
IHRoZW4gdGhpcyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgorICAgICAg
ICAgICAgQVNTRVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpy
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
KiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpCit7CisgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBz
aGFkZXIgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0
IGFuZAorICAgIC8vIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0
ZSBpdC4KKyAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5pZCgpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpk
aXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IFdlYkNvcmUgd2lsbCBub3QgY2FsbCBpbnRvIHRoaXMgY29vcmRpbmF0b3IgYW55bW9yZS4KKyAg
ICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+OjppdGVyYXRvciBpdGVyID0g
bV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+c2V0Q2xp
ZW50KDApOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRh
Y2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVnaXN0
ZXJlZExheWVycy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
KyAgICBtX2RldGFjaGVkTGF5ZXJzLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZv
clNlbGYoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIC8vIFRoZXNlIGNvbmRpdGlv
bnMgbXVzdCBtYXRjaCB0aGUgY29uZGl0aW9ucyBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJh
Y2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOworICAgIGlmICghYmFja2luZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyTGF5ZXItPnJlbmRl
cmVyKCktPnN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
cmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3Np
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIo
KS0+Y29udGFpbmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXJlbmRlckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNz
TGF5ZXItPnNldEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRl
T2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQorewor
ICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAg
aWYgKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21W
aWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5k
ZXJMYXllci0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0
Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0
aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCktPmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgp
LT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAg
ICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJz
dENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RS
ZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmxvY2tBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSB0cnVl
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlNldEFuaW1hdGlvbnNMb2NrZWQodHJ1ZSkpOworfQorCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucygpCit7CisgICAgaWYgKCFtX2FuaW1hdGlv
bnNMb2NrZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGZh
bHNlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OlNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBp
ZiAobV9pc1N1c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdlIGxvY2sgdGhlIGFuaW1hdGlvbnMgd2hpbGUgcGVyZm9ybWluZyBsYXlv
dXQsIHRvIGF2b2lkIGZsaWNrZXJzIGNhdXNlZCBieSBhbmltYXRpb25zIGNvbnRpbnVpbmcgaW4g
dGhlIFVJIHByb2Nlc3Mgd2hpbGUKKyAgICAvLyB0aGUgd2ViIHByb2Nlc3MgbGF5b3V0IHdhbnRz
IHRvIGNhbmNlbCB0aGVtLgorICAgIGxvY2tBbmltYXRpb25zKCk7CisgICAgc3luY0Rpc3BsYXlT
dGF0ZSgpOworCisgICAgLy8gV2UgY2FuIHVubG9jayB0aGUgYW5pbWF0aW9ucyBiZWZvcmUgZmx1
c2hpbmcgaWYgdGhlcmUgYXJlIG5vIHZpc2libGUgY2hhbmdlcywgZm9yIGV4YW1wbGUgaWYgdGhl
cmUgYXJlIGNvbnRlbnQgdXBkYXRlcworICAgIC8vIGluIGEgbGF5ZXIgd2l0aCBvcGFjaXR5IDAu
CisgICAgYm9vbCBjYW5VbmxvY2tCZWZvcmVGbHVzaCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aGFzUGVuZGluZ1Zpc2libGVD
aGFuZ2VzKCk7CisgICAgaWYgKGNhblVubG9ja0JlZm9yZUZsdXNoKQorICAgICAgICB1bmxvY2tB
bmltYXRpb25zKCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQorICAgICAgICBkaWRQZXJmb3JtU2No
ZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c3luY0Rpc3BsYXlTdGF0ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBh
bnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4
ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252
ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZgorCisgICAg
bV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmIChtX25v
dGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3
aW5nQXJlYUltcGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVz
aExheWVycygpOworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZh
bHNlOworICAgIH0KK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1
c2hUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQoreworICAgIHBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92
ZXJsYXlMYXllcik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpj
cmVhdGUodGhpcywgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXll
ci0+c2V0TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHBhZ2Ugb3ZlcmxheSBjb250ZW50
Iik7CisjZW5kaWYKKworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRy
dWUpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7
CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsK
K30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxh
eWVyKCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBu
dWxscHRyOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFn
ZSkKK3sKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAg
SW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdl
SUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOwor
ICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNr
aW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAg
ICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGltYWdl
QmFja2luZzsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSYgaGFuZGxlKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpVcGRhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Q2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUo
aW1hZ2VJRCk7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMo
KQoreworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdz
LmVuZCgpOworICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFn
ZUJhY2tpbmdzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZh
bHVlLT51cGRhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAv
KiB0aW1lICovKQoreworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5
Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9
PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3
UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAg
ICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVh
ciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVy
ZS4KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7CisgICAgICAg
IG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
Q2xpZW50KiBjbGllbnQpCit7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9
IG5ldyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKKyAgICBsYXllci0+c2V0Q29v
cmRpbmF0b3IodGhpcyk7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllcik7CisgICAg
bGF5ZXItPnNldENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAgICBsYXllci0+YWRq
dXN0VmlzaWJsZVJlY3QoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworfQorCitib29s
IExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVU
aWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1
cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxl
UmVjdCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZv
ckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0
ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQoreworICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlEKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhh
bmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxh
c0lEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92
ZVVwZGF0ZUF0bGFzKGF0bGFzSUQpKTsKK30KKworV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKK30KKworCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBj
b25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5p
bWF0aW9ucyA9IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMo
KTsKKyAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IEZp
bHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRl
ckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKyNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVB
bmltYXRpb25zKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1JlY3RE
aWRDaGFuZ2UgPSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRl
bnRzU2NhbGVEaWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBB
IHplcm8gdHJhamVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRo
ZSB2aWV3cG9ydCBhcmUgcmVxdWVzdGVkLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVudHNS
ZWN0RGlkQ2hhbmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNp
YmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7
CisKKyAgICAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhh
c2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaWYgKGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPnNl
dENvbnRlbnRzU2NhbGUoc2NhbGUpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENo
YW5nZSkKKyAgICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3dlYlBh
Z2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gUm91bmQgdGhlIHJlY3QgaW5zdGVh
ZCBvZiBlbmNsb3NpbmcgaXQgdG8gbWFrZSBzdXJlIHRoYXQgaXRzIHNpemUgc3RheXMKKyAgICAg
ICAgLy8gdGhlIHNhbWUgd2hpbGUgcGFubmluZy4gVGhpcyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3Rz
IG9uIGxheW91dC4KKyAgICAgICAgbV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVj
dChyb3VuZGVkSW50UmVjdChyZWN0KSk7CisgICAgfQorCisgICAgaWYgKGNvbnRlbnRzUmVjdERp
ZENoYW5nZSkKKyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVl
OworfQorCitHcmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpn
cmFwaGljc0xheWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKKyNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2NoZWR1bGVBbmltYXRpb24oKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlcXVlc3RBbmltYXRpb25GcmFtZSgpKTsK
K30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHko
KQoreworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0Zv
clVJUHJvY2VzcyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKworYm9vbCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQor
eworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0
cnVlKTsKKworICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46
Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hT
ZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9y
ZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCkt
PnB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cisg
ICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJ
bnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFz
SUQsIEludFBvaW50JiBvZmZzZXQpCit7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVB
dGxhc2VzW2ldLmdldCgpOworICAgICAgICBpZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEoKSA9PSAo
ZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEpKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZl
ciBzcGFjZS4KKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50
aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmIChncmFwaGljc0NvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29u
dGV4dC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50
IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uCisgICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXMo
dGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgc2NoZWR1bGVSZWxl
YXNlSW5hY3RpdmVBdGxhc2VzKCk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCkt
PmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwor
fQorCitjb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAw
LjU7CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZVJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIu
aXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRS
ZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOworfQorCit2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmly
ZWQoVGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCit7CisgICAgLy8gV2UgYWx3YXlz
IHdhbnQgdG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAg
T3duUHRyPFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKKyAgICBib29sIGZvdW5kQWN0
aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOworICAgIGZvciAoaW50IGkg
PSBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFVw
ZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYg
KCFhdGxhcy0+aXNJblVzZSgpKQorICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShS
ZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7CisgICAgICAgIGJvb2wgdXNhYmxl
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKKyAgICAg
ICAgaWYgKGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmICghZm91bmRBY3Rp
dmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1
c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgICAgICBhdGxhc1RvS2Vl
cEFueXdheSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7CisgICAgICAgICAgICBtX3Vw
ZGF0ZUF0bGFzZXMucmVtb3ZlKGkpOworICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNv
bXBvc2l0ZWRDb250ZW50KQorICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBv
c2l0ZWRDb250ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNG
b3JOb25Db21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKKyAgICAgICAgbV91
cGRhdGVBdGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOworCisgICAg
aWYgKG1fdXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIuc3RvcCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3sKKyAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpTZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NjkzOTM1OTE0MDJmODczYzM0MzkzZTM4YjczOTQ1NGYyMTI1MTJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlVw
ZGF0ZUF0bGFzLmgiCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyRmFjdG9yeS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNz
IFdlYlBhZ2U7CisKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBMYXll
clRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKKyAg
ICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQorI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorI2VuZGlm
Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiBjcmVhdGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCgpOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdmlydHVhbCB2b2lk
IHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFm
dGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRD
b250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisgICAg
dmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgYm9vbCBmb3JjZVJlcGFp
bnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxs
UGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3Zl
cmxheU9wYWNpdHkoZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFw
cGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBz
Y2hlZHVsZUxheWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSgpIHsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdl
QmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVS
UklERTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklELCB1aW50MzJfdCB0aWxlSUQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CisgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZp
cnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpD
b25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYp
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOworICAgIHZp
cnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5p
bWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJB
bmltYXRpb25zJik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBz
eW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGlu
YXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOworI2Vu
ZGlmCisgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciopOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKworICAg
IHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFn
cywgaW50JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgLy8gVXBkYXRlQXRs
YXNDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQs
IGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVS
UklERTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBPVkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3Jh
cGhpY3NMYXllckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciop
OworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworCisgICAg
Ly8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZvaWQgZmx1c2hQ
ZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpOworCisgICAgLy8gR3JhcGhpY3NMYXllckZhY3Rv
cnkKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRl
R3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CisK
KyAgICAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QKKyAgICB2b2lkIGluaXRpYWxpemVSb290
Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7CisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxh
eWVyKCk7CisgICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVz
aCgpOworICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIGRp
ZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRl
KCk7CisgICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOworICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9u
cygpOworCisgICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0
aXZlQXRsYXNlcygpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB2
b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKKyNlbmRpZgorCisgICAgdm9pZCByZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q+Kik7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLy8gV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5Q2xpZW50CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7CisKKyAgICB2b2lkIGNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
OworICAgIHZvaWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CisjZW5kaWYKKwor
ICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8v
IFRoZSBsYXllciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAg
ICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyOworCisgICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRo
ZXJlJ3Mgbm8gcGFnZSBvdmVybGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3BhZ2VPdmVybGF5TGF5ZXI7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKKyAgICBWZWN0b3I8Q29vcmRpbmF0
ZWRMYXllcklEPiBtX2RldGFjaGVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1h
Z2VCYWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAg
VmVjdG9yPE93blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpCisgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkq
PiBtX2N1c3RvbUZpbHRlclByb2dyYW1zOworI2VuZGlmCisKKyAgICBib29sIG1fbm90aWZ5QWZ0
ZXJTY2hlZHVsZWRMYXllckZsdXNoOworICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIC8vIFdlIGRv
bid0IHNlbmQgdGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byBV
SSBQcm9jZXNzIGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3MgYWxyZWFkeSBoYWQg
cmVtb3ZlZCBhbGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisKKyAgICBib29s
IG1fd2FpdGluZ0ZvclVJUHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2Vi
Q29yZTo6RmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRl
bnRzU2NhbGU7CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKwor
ICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIGJvb2wgbV9zaG91
bGRTeW5jRnJhbWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXll
cjsKKyAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJG
bHVzaFRpbWVyOworICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4g
bV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZDsKKyAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJ
RDsKKyAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKK307CisKK30KKworI2VuZGlmCisKKyNl
bmRpZiAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lm1lc3NhZ2Vz
LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjAzN2JmNjlmOWNkYWViY2MyZmViY2ExODg1ZDRkZWIxNmM5ODA1YjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAg
LTAsMCArMSwzMSBAQAorIworIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjICAgIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCittZXNzYWdlcyAtPiBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgeworICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6RmxvYXRS
ZWN0IHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50
IHRyYWplY3RvcnlWZWN0b3J5KQorICAgIFJlbmRlck5leHRGcmFtZSgpCisgICAgUHVyZ2VCYWNr
aW5nU3RvcmVzKCkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgQW5p
bWF0aW9uRnJhbWVSZWFkeSgpCisjZW5kaWYKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMTdjZGJhYTY1MDU1YTljNTg3ZWI5MDE5ZDZmY2Y1NGMwZDZmNTE3Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgzNyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcyku
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1
ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yLmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKLSNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5n
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUg
PHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNs
dWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAiVmFsaWRhdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5h
dG9yPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclRyZWVDb29yZGluYXRvcih3ZWJQYWdlKSk7Ci19
Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKQotewotI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMo
KTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQoMCkgLT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdl
IGl0ZXJhdGUgaXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPiByZWdpc3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lz
dGVyZWRMYXllcnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0
ID0gcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgq
aXQpLT5zZXRDb29yZGluYXRvcigwKTsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVy
VHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdl
YlBhZ2UpCi0gICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAg
ICAsIG1faXNWYWxpZCh0cnVlKQotICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCi0gICAgLCBtX3dh
aXRpbmdGb3JVSVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCi0gICAg
LCBtX2NvbnRlbnRzU2NhbGUoMSkKLSAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBk
YXRlKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKLSAgICAsIG1fZGlkSW5p
dGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQotICAgICwgbV9sYXllckZsdXNoVGlt
ZXIodGhpcywgJkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZCkKLSAg
ICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGlu
YXRvcjo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCi0gICAgLCBtX2xheWVyRmx1
c2hTY2hlZHVsaW5nRW5hYmxlZCh0cnVlKQotICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxi
YWNrSUQoMCkKLSAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLXsKLSAgICAvLyBDcmVh
dGUgYSByb290IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRl
KHRoaXMsIHRoaXMpOwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRS
b290TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7
Ci0gICAgY29vcmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHJv
b3QgbGF5ZXIiKTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFs
c2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBt
X2xheWVyVHJlZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIoY29vcmRpbmF0ZWRSb290TGF5ZXIpLT5pZCgpOwotCi0gICAgbV9ub25Db21wb3Np
dGVkQ29udGVudExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxh
eWVyVHJlZUNvb3JkaW5hdG9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKLSNlbmRpZgotICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7
Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LmdldCgpKTsKLQotICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCi0gICAgICAg
IGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0Vu
YWJsZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNo
U2NoZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0Vu
YWJsZWQ7Ci0KLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAg
ICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzY2hlZHVsZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXllckZsdXNoVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgp
Ci17Ci0gICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yOjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJv
b2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQotewotICAgIG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5k
KCkgJiYgIW1fd2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7Ci0KLSAgICAv
LyBBZGQgdGhlIGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgotICAgIGlmIChncmFw
aGljc0xheWVyKQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxk
KGdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjppbnZhbGlk
YXRlKCkKLXsKLSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1f
aXNWYWxpZCk7Ci0gICAgbV9yb290TGF5ZXIgPSBudWxscHRyOwotICAgIG1faXNWYWxpZCA9IGZh
bHNlOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29u
dGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwot
ICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiAvKiBzY3JvbGxPZmZzZXQgKi8pCi17Ci0gICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRl
bnRzTmVlZERpc3BsYXkoc2Nyb2xsUmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmZvcmNlUmVwYWludCgpCi17Ci0gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5p
bmcgbGF5b3V0IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZv
ciBhIFVJUHJvY2VzcyB0byByZXBseSBuaWNlbHkuCi0gICAgLy8gSW5zdGVhZCB3ZSBhcmUganVz
dCB0cmlnZ2VyaW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUg
c2NyaXB0ZWQgYW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4KLSAgICBzeW5jRGlz
cGxheVN0YXRlKCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gs
IG90aGVyd2lzZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVk
IGZsdXNoLgotICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsK
LX0KLQotYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0
X3QgY2FsbGJhY2tJRCkKLXsKLSAgICAvLyBXZSBleHBlY3QgdGhlIFVJIHByb2Nlc3MgdG8gbm90
IHJlcXVpcmUgYSBuZXcgcmVwYWludCB1bnRpbCB0aGUgcHJldmlvdXMgb25lIGhhcyBmaW5pc2hl
ZC4KLSAgICBBU1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKLSAgICBtX2Zv
cmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IGNhbGxiYWNrSUQ7Ci0gICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKLXsKLSAg
ICBpZiAobV9yb290TGF5ZXItPnNpemUoKSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIC8vIElmIHRoZSBuZXdT
aXplIGV4cG9zZXMgbmV3IGFyZWFzIG9mIHRoZSBub24tY29tcG9zaXRlZCBjb250ZW50IGEgc2V0
TmVlZHNEaXNwbGF5IGlzIG5lZWRlZAotICAgIC8vIGZvciB0aG9zZSBuZXdseSBleHBvc2VkIGFy
ZWFzLgotICAgIEZsb2F0U2l6ZSBvbGRTaXplID0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LT5zaXplKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG5ld1Np
emUpOwotCi0gICAgaWYgKG5ld1NpemUud2lkdGgoKSA+IG9sZFNpemUud2lkdGgoKSkgewotICAg
ICAgICBmbG9hdCBoZWlnaHQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxmbG9hdD4obmV3U2l6ZS5o
ZWlnaHQoKSksIG9sZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJlY3Qob2xkU2l6ZS53aWR0aCgp
LCAwLCBuZXdTaXplLndpZHRoKCkgLSBvbGRTaXplLndpZHRoKCksIGhlaWdodCkpOwotICAgIH0K
LQotICAgIGlmIChuZXdTaXplLmhlaWdodCgpID4gb2xkU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRS
ZWN0KDAsIG9sZFNpemUuaGVpZ2h0KCksIG5ld1NpemUud2lkdGgoKSwgbmV3U2l6ZS5oZWlnaHQo
KSAtIG9sZFNpemUuaGVpZ2h0KCkpKTsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0g
ICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIHNjaGVk
dWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpkaWRJbnN0
YWxsUGFnZU92ZXJsYXkoKQotewotICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKLSAgICBz
Y2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlk
VW5pbnN0YWxsUGFnZU92ZXJsYXkoKQotewotICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7
Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3Zlcmxh
eUxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFBhZ2VPdmVybGF5T3Bh
Y2l0eShmbG9hdCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKLSAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOwotICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwotfQotCi1ib29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKQotewotICAgIGlmIChtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKCk7Ci0KLSAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
Ci0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwotCi0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJm
cmFtZXMoKTsKLQotICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXplKCk7ICsraSkKLSAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpEZWxldGVDb21wb3NpdGluZ0xheWVyKG1fZGV0YWNoZWRMYXllcnNbaV0pKTsKLSAgICBtX2Rl
dGFjaGVkTGF5ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKLSAg
ICAgICAgZGlkU3luYyA9IHRydWU7Ci0KLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSBy
b3VuZGVkSW50U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7Ci0gICAg
ICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRSZW5k
ZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7Ci0gICAgICAgIG1fd2FpdGluZ0Zv
clVJUHJvY2VzcyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmIChtX2ZvcmNl
UmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFj
a0lEKSk7Ci0gICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQotewotICAgIGlmIChtX2Rp
ZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRS
b290Q29tcG9zaXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXll
ci5nZXQoKSktPmlkKCkpKTsKLSAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXll
ciA9IHRydWU7Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGlmIChtX3Nob3VsZFNlbmRT
Y3JvbGxQb3NpdGlvblVwZGF0ZSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlz
aWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9s
bFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihp
ZCwgY2hpbGRyZW4pKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxh
dGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9y
bUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9
IGNhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVDYW52YXMo
aWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQ
bGF0Zm9ybUxheWVyKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB1aW50
MzJfdCBmcm9udEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3Vy
ZmFjZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0g
ICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckZpbHRl
cnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRp
ZgotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2hl
Y2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzKQotewotICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkgb2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRvIHNlcmlhbGl6ZSB0aGUKLSAgICAvLyBj
dXN0b20gZmlsdGVycyB0byB0aGUgb3RoZXIgcHJvY2Vzcy4gVGhhdCdzIGJlY2F1c2UgV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5IG5lZWRzCi0gICAgLy8gdG8gbGluayBiYWNrIHRvIHRoZSBj
b29yZGluYXRvciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nl
c3Mgd2hlbiAKLSAgICAvLyB0aGUgcHJvZ3JhbSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoZSBzZXJpYWxpemF0aW9uIHdpbGwgb25seSBoYXBwZW4gYXQgYSBsYXRl
ciB0aW1lIGluIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29k
ZS4KLSAgICAvLyBBdCB0aGF0IHBvaW50IHRoZSBwcm9ncmFtIHdpbGwgb25seSBiZSBzZXJpYWxp
emVkIG9uY2UuIEFsbCB0aGUgb3RoZXIgdGltZXMgaXQgd2lsbCBvbmx5IHVzZSB0aGUgSUQgb2Yg
dGhlIHByb2dyYW0uCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVy
cy5hdChpKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZp
bHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJh
dGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+
KG9wZXJhdGlvbik7Ci0gICAgICAgIEFTU0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFBy
b2dyYW0oKS0+aXNJbml0aWFsaXplZCgpKTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
Q29tcGlsZWRQcm9ncmFtKiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9n
cmFtKCktPnBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKCk7Ci0gICAgICAgIAotICAgICAgICBSZWZQ
dHI8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk7
Ci0gICAgICAgIGlmIChwcm9ncmFtLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+
KHByb2dyYW0tPmNsaWVudCgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk6OmNyZWF0ZSgp
OwotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5LT5jbGllbnQoKSkgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LT5zZXRDbGllbnQodGhpcyk7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFBy
b2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMg
Y29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KLSAgICAgICAgICAgIEFTU0VS
VChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBjdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHkpCi17Ci0gICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5l
ZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZCAKLSAgICAvLyBz
ZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCi0gICAgbV9j
dXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQ
cm9ncmFtcygpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgV2ViQ29yZSB3aWxsIG5vdCBjYWxs
IGludG8gdGhpcyBjb29yZGluYXRvciBhbnltb3JlLgotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1z
LmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5lbmQo
KTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQoMCk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiBsYXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9kZXRhY2hlZExheWVycy5hcHBl
bmQobGF5ZXItPmlkKCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi1zdGF0aWMg
dm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJM
YXllcikKLXsKLSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlv
bnMgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRp
b24uCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tp
bmcoKTsKLSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIGlmICgh
c3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVy
KCktPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZp
ZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2lu
Z0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoYmFja2luZy0+
Z3JhcGhpY3NMYXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQo
dHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVy
KFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3Bv
cnRGb3JTZWxmKHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGls
ZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXll
ci0+Zmlyc3RDaGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0
U2libGluZygpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5
ZXJzKCkKLXsKLSAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAh
bV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5
ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRv
cigpLT5yb290UmVuZGVyTGF5ZXIoKTsKLSAgICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKLSAg
ICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNl
dEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bG9ja0FuaW1hdGlvbnMoKQotewotICAgIG1f
YW5pbWF0aW9uc0xvY2tlZCA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKHRydWUpKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dW5sb2NrQW5pbWF0aW9ucygpCi17Ci0gICAg
aWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0
aW9uc0xvY2tlZCA9IGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSkpOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17
Ci0gICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxlIHBlcmZvcm1p
bmcgbGF5b3V0LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9ucyBjb250aW51
aW5nIGluIHRoZSBVSSBwcm9jZXNzIHdoaWxlCi0gICAgLy8gdGhlIHdlYiBwcm9jZXNzIGxheW91
dCB3YW50cyB0byBjYW5jZWwgdGhlbS4KLSAgICBsb2NrQW5pbWF0aW9ucygpOwotICAgIHN5bmNE
aXNwbGF5U3RhdGUoKTsKLQotICAgIC8vIFdlIGNhbiB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgYmVm
b3JlIGZsdXNoaW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNoYW5nZXMsIGZvciBleGFtcGxl
IGlmIHRoZXJlIGFyZSBjb250ZW50IHVwZGF0ZXMKLSAgICAvLyBpbiBhIGxheWVyIHdpdGggb3Bh
Y2l0eSAwLgotICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2ggPSAhbV9pc1ZhbGlkIHx8ICF0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmhhc1BlbmRpbmdW
aXNpYmxlQ2hhbmdlcygpOwotICAgIGlmIChjYW5VbmxvY2tCZWZvcmVGbHVzaCkKLSAgICAgICAg
dW5sb2NrQW5pbWF0aW9ucygpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAgICAgZGlkUGVy
Zm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6c3luY0Rpc3BsYXlTdGF0ZSgpCi17Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUgdGhh
dCBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5n
IGV4ZWN1dGVkIGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhj
b252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKLSNlbmRpZgotCi0g
ICAgbV93ZWJQYWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdp
bmdBcmVhSW1wbCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNo
TGF5ZXJzKCk7Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFs
c2U7Ci0gICAgfQotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGlt
ZXJGaXJlZChUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIHBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0
ZVBhZ2VPdmVybGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsK
LQotICAgIG1fcGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0
aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJM
YXllclRyZWVDb29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAg
ICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5
ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQo
bV9wYWdlT3ZlcmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1QYXNzUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRl
SW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VCYWNr
aW5ncy5lbmQoKSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Y3JlYXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChp
bWFnZUlELCBpbWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZUJhY2tpbmcg
PSBpdC0+dmFsdWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUlt
YWdlQmFja2luZyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVw
ZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV9zaG91bGRT
eW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkp
OwotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX2ltYWdlQmFja2luZ3MucmVt
b3ZlKGltYWdlSUQpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCi17
Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5k
KCk7Ci0gICAgZm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFj
a2luZ3MuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+dmFsdWUt
PnVwZGF0ZSgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRp
b25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAq
LykKLXsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1aXJl
ZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNsaXBSZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRMYXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29u
dGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBo
aWNzTGF5ZXIgPT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJsYXlzIGNv
bnRhaW4gdHJhbnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFz
IHBhcnQgb2YgdGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAgICBncmFw
aGljc0NvbnRleHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3
UGFnZU92ZXJsYXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewot
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBuZXcgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKGNsaWVudCk7Ci0gICAgbGF5ZXItPnNldENvb3JkaW5hdG9yKHRoaXMpOwotICAg
IG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5ZXIpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1Nj
YWxlKG1fY29udGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBw
b3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxl
UmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRh
dGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0
aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVUaWxlRm9y
TGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVy
KGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVh
dGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpI
YW5kbGUmIGhhbmRsZSkKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSkpOwot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVVw
ZGF0ZUF0bGFzKGF0bGFzSUQpKTsKLX0KLQotV2ViQ29yZTo6RmxvYXRSZWN0IExheWVyVHJlZUNv
b3JkaW5hdG9yOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92
aXNpYmxlQ29udGVudHNSZWN0OwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNl
dExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhp
Y3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBh
bmltYXRpb25zLmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMo
KS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJh
bWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAg
IGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVy
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
a2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25W
YWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclBy
b2dyYW1Qcm94aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVj
dG9yeVZlY3RvcikKLXsKLSAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0g
bV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGJvb2wgY29udGVudHNTY2FsZURpZENoYW5nZSA9
IHNjYWxlICE9IG1fY29udGVudHNTY2FsZTsKLQotICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVj
dG9yIGluZGljYXRlcyB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1
ZXN0ZWQuCi0gICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29u
dGVudExheWVyLmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0
cmFqZWN0b3J5VmVjdG9yKTsKLQotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29u
dGVudHNTY2FsZURpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSBy
ZWN0OwotICAgICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLQotICAgICAgICBIYXNoU2V0
PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3Jl
Z2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNTY2Fs
ZURpZENoYW5nZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2Fs
ZSk7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICAgICAg
ICAgICgqaXQpLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQo
KSkgewotICAgICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0
byBtYWtlIHN1cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwotICAgICAgICAvLyB0aGUgc2FtZSB3aGls
ZSBwYW5uaW5nLiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgotICAgICAg
ICBtX3dlYlBhZ2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJl
Y3QpKTsKLSAgICB9Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICBt
X3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7Ci19Ci0KLUdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBMYXllclRyZWVDb29yZGluYXRvcjo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQot
ewotICAgIHJldHVybiB0aGlzOwotfQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVBbmltYXRpb24oKQotewot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjphbmltYXRpb25GcmFtZVJlYWR5KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0K
LSNlbmRpZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQot
ewotICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwotICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsK
LX0KLQotYm9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxv
d2VkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0Zv
clVJUHJvY2VzczsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKCkKLXsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lz
UHVyZ2luZywgdHJ1ZSk7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRv
ciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAg
ICAgICgqaXQpLT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5j
bGVhcigpOwotICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1QYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBpbnQm
IGF0bGFzSUQsIEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gZ3JhcGhpY3NDb250ZXh0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91
cGRhdGVBdGxhc2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEo
KSA9PSAoZmxhZ3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxl
IGJ1ZmZlciBzcGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdp
blBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAg
ICAgICAgIGlmIChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBo
aWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29u
c3QgaW50IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dl
ciBvZiB0d28uCi0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRl
QXRsYXModGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1
bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5s
YXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZz
ZXQpOwotfQotCi1jb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwgPSAwLjU7Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUlu
YWN0aXZlQXRsYXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1l
ci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFy
dFJlcGVhdGluZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVk
KFRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopCi17Ci0gICAgLy8gV2UgYWx3YXlzIHdhbnQg
dG8ga2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRy
PFVwZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5kQWN0aXZlQXRs
YXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSBtX3Vw
ZGF0ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFVwZGF0ZUF0
bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFhdGxh
cy0+aXNJblVzZSgpKQotICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIGJvb2wgdXNhYmxlRm9yTm9u
Q29tcG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKLSAgICAgICAgaWYg
KGF0bGFzLT5pc0luYWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmRBY3RpdmVBdGxh
c0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2FibGVG
b3JOb25Db21wb3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFueXdh
eSA9IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtX3VwZGF0ZUF0
bGFzZXMucmVtb3ZlKGkpOwotICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBvc2l0
ZWRDb250ZW50KQotICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRD
b250ZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKLSAgICAgICAgbV91cGRhdGVB
dGxhc2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOwotCi0gICAgaWYgKG1f
dXBkYXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXIuc3RvcCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QmFja2dyb3Vu
ZENvbG9yKGNvbG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDU3
OGU1NWMzYjNjN2E0MGE2MGIxZGI2MzdhMmFmZDQxMzc0YmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXll
clRyZWVDb29yZGluYXRvcl9oCi0jZGVmaW5lIExheWVyVHJlZUNvb3JkaW5hdG9yX2gKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCi0jaW5jbHVk
ZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNs
dWRlICJUaW1lci5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgVXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUNv
b3JkaW5hdG9yIDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQKLSAgICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAs
IHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1Ymxp
YyBVcGRhdGVBdGxhc0NsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5Q2xpZW50Ci0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxMYXllclRyZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5M
YXllclRyZWVDb29yZGluYXRvcigpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250
ZXh0JiBsYXllclRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNl
dE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9s
bE9mZnNldCk7Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBmb3JjZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92
ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQpOwotICAgIHZpcnR1YWwgYm9vbCBwYWdl
T3ZlcmxheVNob3VsZEFwcGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQg
PSB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3Bl
bmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQotICAgIHZpcnR1YWwgdm9pZCBk
ZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29y
ZTo6SW1hZ2UqKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0
b3JlcygpOwotICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYp
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSog
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmly
dHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2Vi
Q29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZF
UlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVy
cygpOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLSAgICAv
LyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhp
bnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwotCi0jaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIE9WRVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRD
b2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYpIE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
ZXhwbGljaXQgTGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSopOwotCi1wcml2YXRlOgotICAg
IC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsK
LQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lk
IGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIC8vIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+
IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJS
SURFOwotCi0gICAgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3IKLSAgICB2b2lkIGluaXRpYWxpemVS
b290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCk7Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJvb2wg
Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJG
bHVzaCgpOwotICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lk
IGRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBzeW5jRGlzcGxheVN0
YXRlKCk7Ci0gICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwotICAgIHZvaWQgdW5sb2NrQW5pbWF0
aW9ucygpOwotCi0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxM
YXllclRyZWVDb29yZGluYXRvcj4qKTsKLQotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzKCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZv
aWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIHJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9y
PiopOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIC8vIFdlYkN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eUNsaWVudAotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
KFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSopOwotCi0gICAgdm9pZCBjaGVja0N1c3RvbUZp
bHRlclByb2dyYW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSAg
ICB2b2lkIGRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwotI2VuZGlmCi0KLSAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICAvLyBUaGUg
bGF5ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsK
LQotICAgIC8vIFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdz
IG5vIHBhZ2Ugb3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9w
YWdlT3ZlcmxheUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4gbV9kZXRhY2hlZExheWVyczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFj
a2luZ01hcDsKLSAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwotICAgIFZlY3Rv
cjxPd25QdHI8VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwotCi0jaWYgRU5BQkxFKENT
U19TSEFERVJTKQotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4gbV9j
dXN0b21GaWx0ZXJQcm9ncmFtczsKLSNlbmRpZgotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSAgICAvLyBXZSBkb24ndCBz
ZW5kIHRoZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gVUkgUHJv
Y2VzcyBkdXJpbmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFscmVhZHkgaGFkIHJlbW92
ZWQgYWxsIHJlc291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5nOwotCi0gICAgYm9vbCBtX3dh
aXRpbmdGb3JVSVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1Nj
YWxlOwotICAgIGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7Ci0KLSAgICBM
YXllclRyZWVDb250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3lu
Y0ZyYW1lOwotICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7Ci0g
ICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVy
OwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
OwotICAgIHVpbnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwotICAgIGJvb2wg
bV9hbmltYXRpb25zTG9ja2VkOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVy
VHJlZUNvb3JkaW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDE2MzZlNzAwOWVmMTIxZDhhNGNmYTFhNjU0YWNkMjlkYTgzMjc1OTAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IubWVzc2FnZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jCi0jICAgIENv
cHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSMgICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yIHsKLSAgICBTZXRWaXNpYmxl
Q29udGVudHNSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9h
dCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKLSAgICBSZW5k
ZXJOZXh0RnJhbWUoKQotICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCi0jaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIEFuaW1hdGlvbkZyYW1lUmVhZHkoKQotI2VuZGlmCi19
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmgKaW5kZXggMzI3ZjY1MWM5M2Y2MmVjYWM0ZTNlMTA1NGIwN2UzMjMwMTFmYmJlYy4uYWU1
YjJjOGI2OTg4ZGM4ZDZlMmExMmY1Y2NmNmMzMTIzOTM4ZDc0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk1LDcgKzk1LDcgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXIm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhv
c3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuY3BwCmluZGV4IDVlNzBjOTQ0ODEzNDUwNDNjNDk3Y2YyYTRkZmU5OGMxZTMyMjljNzQuLjg2
YzUzYjE4MTA3NjIxNDM1MThiZDI5NjNlY2NjY2YxZTI3YTY1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCkBAIC03
MjksMTAgKzcyOSwxMCBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvKQogfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBE
cmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJ
RCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCit2b2lkIERyYXdpbmdBcmVhSW1w
bDo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVj
dGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggNmQ0OTcx
OWY3YTk4Y2VmMjVkNDkzNWZmYTcwNmNhNGNkMmNmZDNiMC4uYTMxMzMxNmM5YWQ5OWQ5OGY2NmM3
MmJiZWZmOTQ1YjEwYTkxZWRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURl
Y29kZXImKTsKICNlbmRpZgogCiAgICAgLy8gQ29yZUlQQyBtZXNzYWdlIGhhbmRsZXJzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IDdkNTkwYTFhN2FlNjA4MDgzZmE4ZjZkMzdlMjZjMTY5ZGY0OWVkNGYuLjNlMzA0MmRh
NjI2ZGUyMWEwMzU4MTdhYTEwMDBmMWFiNmVjZTY3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDcgKzM1LDcg
QEAKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxh
eWVyVHJlZUNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmgiCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQpAQCAtNTMsNyArNTMsNyBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhv
c3Q6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZF
KFdLUUNBKQogICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsK
ICNlbGlmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICByZXR1cm4gTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmNyZWF0ZSh3ZWJQYWdlKTsKKyAgICByZXR1cm4gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjpjcmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShHVEspICYmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlKHdlYlBh
Z2UpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9MYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5
ZXJUcmVlSG9zdC5oCmluZGV4IGQ0ZDVlZGM4Y2MyZjRmODY5MjhmMmU1YzJkZDJkYzA5Zjc3YWNm
OGIuLmVkODkxMDU0ZDMyMzkyODg4NmJmZjYzNjFiNjg1MmMxMTgxNDdjY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtOTYs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgLyogc2NhbGUgKi8sIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVy
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpNZXNzYWdlRGVjb2RlciYpID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDEw
MmZmNWViNDdhZTU3Nzg1ZmZkZTg3Zjc0ODkzMjk5MDlkOGYzYmYuLjgwNmY5MDMwMDE1NmU3ZWUx
ODVmNzgzNWRlMDA1NGY4OGMwYWUwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQAogI2VuZGlmCiAKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTM3Niw3ICszNzYsNyBAQCBXZWJQ
YWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0
aGUgb2JqZWN0IGNvbnN0cnVjdG9ycywgYW5kIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgc2hvdWxk
IGJlIG1lc3NhZ2UgcmVjZWl2ZXJzLgogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlSUQsIHRoaXMpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCB0aGlzKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgdGhpcyk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZUlELCB0aGlzKTsKQEAgLTQwNyw3ICs0MDcsNyBAQCBXZWJQYWdlOjp+
V2ViUGFnZSgpCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIG9iamVj
dCBkZXN0cnVjdG9ycywgYW5kIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgc2hvdWxkIGJlIG1lc3Nh
Z2UgcmVjZWl2ZXJzLgogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
SUQpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFn
ZUlEKTsKQEAgLTI5MTIsOSArMjkxMiw5IEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnCiAgICAg
fQogCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVy
VHJlZUNvb3JkaW5hdG9yPigpKSB7CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNz
YWdlQ2xhc3NDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KCkpIHsKICAgICAgICAgaWYgKG1fZHJh
d2luZ0FyZWEpCi0gICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVl
Q29vcmRpbmF0b3JNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAg
ICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178752</attachid>
            <date>2012-12-11 02:00:38 -0800</date>
            <delta_ts>2012-12-11 13:24:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104641-20121211185801.patch</filename>
            <type>text/plain</type>
            <size>170893</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmJkM2QxOTZjMjJjYTA2
MWI5Y2Q1ZWVhNTc0Y2I0YTZjY2RlMWM0MS4uODY5NmNlMjc1ZDlkMWY2YjBlZWI0Njc3Y2E0Y2M1
MDJkYjZhYTQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAxMi0xMi0xMSAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFJlbmFtZSBMYXllclRyZWVDb29yZGluYXRvciB0byBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNDY0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBuYW1lIG9mIExheWVyVHJlZUNvb3JkaW5hdG9yIGRvZXMgbm90IG1hdGNoIExh
eWVyVHJlZUhvc3QuICBUaGlzCisgICAgICAgIHBhdGNoIHJlbmFtZXMgaXQgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LiBBbmQgbWFrZSBhIGdldHRlciBmb3IKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaW4gUVF1aWNrV2ViUGFnZVByaXZhdGUgdG8gbWFrZSBhIGNs
ZWFuZXIgY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IGEgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5w
cmk6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaDoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKEV3a1ZpZXdJbXBsOjpsYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQ
cml2YXRlOjpwYWludCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6Y29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFp
bnROb2RlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFSYXdXZWJWaWV3Ojpz
ZXRTaXplKToKKyAgICAgICAgKFFSYXdXZWJWaWV3OjpsYXllclRyZWVSZW5kZXJlcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZp
ZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRpc3BhdGNoVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmls
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpy
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2luZyk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250
ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6c2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmFuaW1hdGlvbkZyYW1lUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5
bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMu
aW4uCisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVl
UmVuZGVyZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YW5pbWF0aW9u
RnJhbWVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVW
aWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVSZW5kZXJlcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2
ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExl
Z2FjeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlk
Q2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRVbmluc3RhbGxQYWdlT3Zl
cmxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0
Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0ZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExh
eWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5
bmNEaXNwbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VP
dmVybGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpm
bHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NM
YXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpiZWdpbkNvbnRl
bnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xv
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlQ29u
dGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFnZU92
ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJ
bXBsOjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2lu
Z0FyZWFJbXBsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKExheWVyVHJlZUhv
c3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6On5X
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
CiAyMDEyLTEyLTEwICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWls
ZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDhkZTMxOTEwMmUyNWM0ZDQ1ODJkNjI4NDNl
MmUxMGU2ZDg2OGYzMjYuLjI0M2Q5MGM1ZWYyNDU3ZWRkYjU0NzU0ZTVjYTljOTM4NTA3NWU5ZDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0zNDgsNyArMzQ4LDcgQEAgc2V0KFdlYktpdDJfU09V
UkNFUwogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuY3Bw
CiAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdT
dG9yZS5jcHAKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAogCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9E
b3dubG9hZFByb3h5LmNwcApAQCAtNTAyLDcgKzUwMiw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZElt
YWdlQmFja2luZy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAorICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRh
dGVBdGxhcy5jcHAKICkKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHNldChXZWJLaXQyX01FU1NBR0VT
X0lOX0ZJTEVTCiAgICAgVUlQcm9jZXNzL1dlYlZpYnJhdGlvblByb3h5Lm1lc3NhZ2VzLmluCiAK
IAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkubWVzc2FnZXMuaW4KKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAKQEAgLTU3OSw3ICs1NzksNyBAQCBz
ZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5
Lm1lc3NhZ2VzLmluCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5p
bgogKQogCiBzZXQoV2ViUHJvY2Vzc19FWEVDVVRBQkxFX05BTUUgV2ViUHJvY2VzcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9XZWJLaXQy
L0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCAwZmRjNDljN2RhYmI0Y2FiZjBhMDE5YjJkYjBlOGFi
MDQ5MDVkOGE0Li40NDQ4MzM4ZmZlYmM5YzNmMmY5ODY4YTkxNDBkMWIwMjdjMWQ3YTM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291cmNlL1dl
YktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC02NCwxMCArNjQsMTAgQEAgVlBBVEggPSBcCiAK
IE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tZXNzYWdl
cy5pbiBcCisgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gXAog
ICAgIERvd25sb2FkUHJveHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJveHkubWVz
c2FnZXMuaW4gXAogICAgIEV2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBcCi0gICAgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC05OCw4ICs5OCw4IEBAIE1F
U1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVzc2FnZXMu
aW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwKKyAgICBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwKLSAgICBM
YXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViSW5zcGVjdG9yLm1lc3Nh
Z2VzLmluIFwKICAgICBXZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlR3JvdXBQcm94
eS5tZXNzYWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdl
SUQuaAppbmRleCBmYTcwZDU1NzczNTllNzc3NGQxMjA3N2UyZmNlNjY5NjA2M2M5Y2ViLi5lZDYz
ZDU0NzllZmQzYjEzMmFkNjk5YTM4ZDkwYjQ5ZWNlMzViZjA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTM2LDggKzM2LDggQEAgZW51bSBNZXNz
YWdlQ2xhc3MgewogCiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgVUkgcHJvY2VzcyB0byB0
aGUgd2ViIHByb2Nlc3MuCiAgICAgTWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5hZ2VyLAor
ICAgIE1lc3NhZ2VDbGFzc0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCwKICAgICBNZXNzYWdlQ2xh
c3NEcmF3aW5nQXJlYSwKLSAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvciwKICAg
ICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNzYWdlQ2xh
c3NXZWJCYXR0ZXJ5TWFuYWdlclByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tpZU1hbmFn
ZXIsCkBAIC02MCw5ICs2MCw5IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICNlbmRpZgogCiAgICAg
Ly8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIFVJIHByb2Nlc3MuCisg
ICAgTWVzc2FnZUNsYXNzQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHksCiAgICAgTWVzc2Fn
ZUNsYXNzRG93bmxvYWRQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYVByb3h5LAot
ICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHksCiAgICAgTWVzc2FnZUNs
YXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NXZWJC
YXR0ZXJ5TWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb25uZWN0aW9uLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkK
aW5kZXggMDQ3ZDE3MDdjYTMzNTBiZDlmMWEzMDRjNmI3YWU5ZTkwOGJkZDFiNC4uNTgzMzg5NmE4
MTEwMGRjNDRhYjgxMDFhMDEzNzRhYzQ5NGVjZmU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yMTEsNyAr
MjExLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5oIFwKICAg
ICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCi0gICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIFwKKyAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oIFwKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5k
ZXJlci5oIFwKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmggXAogICAgIFVJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggXApAQCAtMzc0LDggKzM3NCw4IEBAIEhFQURFUlMg
Kz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRp
bGUuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdo
dENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmggXApA
QCAtNTcxLDcgKzU3MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9CYWNraW5nU3Rv
cmUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQmFja2luZ1N0b3JlUXQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAgXAot
ICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0xheWVyVHJlZVJlbmRlcmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJv
bGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgXApA
QCAtNzYwLDggKzc2MCw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZElt
YWdlQmFja2luZy5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBc
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKaW5kZXggNTI3ZTkw
Nzc3YmEyMTNmZWZmZjhkNTMwYTUzMGFjODU5NmFlOTZiMC4uZTkwNTFlMjY4MWEzMTY0ZGVjMzhh
Yjk3NWQ2OTMxOTRiMGRhZDhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcApAQCAtMjIsMTEgKzIyLDExIEBACiAjaW5jbHVkZSAiRXdr
Vmlld0ltcGwuaCIKIAogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50RWZsLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJFZmxTY3JlZW5V
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiRm9ybUNs
aWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUg
IkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJl
ci5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudERl
ZmF1bHRJbXBsLmgiCkBAIC0zNTEsMTEgKzM1MSwxMSBAQCBMYXllclRyZWVSZW5kZXJlciogRXdr
Vmlld0ltcGw6OmxheWVyVHJlZVJlbmRlcmVyKCkKICAgICBpZiAoIWRyYXdpbmdBcmVhKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSog
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGlu
YXRvclByb3h5KCk7Ci0gICAgaWYgKCFsYXllclRyZWVDb29yZGluYXRvclByb3h5KQorICAgIFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7
CisgICAgaWYgKCFjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVu
ZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVy
VHJlZVJlbmRlcmVyKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZTVmM2QzZWQ0NzQwZmUwMmY1MWQ1
MWUxZTVlNjBlMzAxY2EwMDYwZC4uNmIzOTczMTg5NWRmYzAxOTVlMTRhN2E1Y2U0MjQ3MTdhYjY2
MThhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclBy
b3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNs
dWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxl
ci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgpAQCAtNzAsOSArNzAsMTYgQEAgdm9p
ZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCiAgICAgaWYg
KCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSB3ZWJQ
YWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAg
ICBpZiAobGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKSkKLSAg
ICAgICAgbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFp
bnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBpZiAoY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKSkKKyAgICAgICAgY29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0dyYXBoaWNz
Q29udGV4dChwYWludGVyKTsKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIFFR
dWlja1dlYlBhZ2VQcml2YXRlOjpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpCit7Cisg
ICAgaWYgKHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgcmV0dXJuIHdlYlBh
Z2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsK
KworICAgIHJldHVybiAwOwogfQogCiBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWlu
dE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCkBAIC04MCw4ICs4
Nyw3IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBv
bGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKICAgICBpZiAoIWQtPndlYlBhZ2VQcm94eS0+
ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIG9sZE5vZGU7CiAKLSAgICBMYXllclRyZWVD
b29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gZC0+d2ViUGFnZVBy
b3h5LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7Ci0gICAgTGF5
ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5
ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBkLT5j
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigpOwogCiAg
ICAgUXRXZWJQYWdlU0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dOb2RlKj4o
b2xkTm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTU1LDkgKzE2MSw4IEBAIHZvaWQgUVF1aWNr
V2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogewogICAgIFFTaXplRiBzY2FsZWRTaXplID0g
Y29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKIAotICAgIERyYXdpbmdBcmVhUHJveHkqIGRy
YXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5n
QXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpKQotICAgICAg
ICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5zZXRDb250ZW50c1Np
emUoV2ViQ29yZTo6RmxvYXRTaXplKGNvbnRlbnRzU2l6ZSkpOworICAgIGlmIChjb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSgpKQorICAgICAgICBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSgpLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKGNvbnRlbnRzU2l6ZSkp
OwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCmluZGV4IGM3YWM4NmMzZDVj
MmYyN2ZiMjVlYjU3ZTliNGMxMGUwZmQwMzE4NmQuLjcwYzRlN2EwOTJiNzRlNzljNDBhNTE4ZTJj
Mzk4YjQ4NGE4YWE3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOwor
Y2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CiB9CiAKIGNsYXNzIFFRdWlja1dl
YlBhZ2VQcml2YXRlIHsKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWlu
dChRUGFpbnRlciopOwogICAgIHZvaWQgcmVzZXRQYWludE5vZGUoKTsKKyAgICBXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSgpOwogCiAgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI+
IGV2ZW50SGFuZGxlcjsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwCmluZGV4IDNm
OWMzYjJhZTNiZTk4YzFhZGE0NTliYzNmYWVjMWI0Njg5ODhkOGYuLjJkZDQ1ZDBlZmZlOWUwZjNm
ZmJhZDM2NDlkMzBlOTU3NmZiZjlkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKQEAgLTIwLDkgKzIwLDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19wLmgiCiAKKyNpbmNsdWRlICJD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2lu
Y2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAi
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQu
aCIKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpzZXRTaXplKGNvbnN0IFFT
aXplJiBzaXplKQogICAgIGlmIChkLT5tX3dlYlBhZ2VQcm94eS0+dXNlRml4ZWRMYXlvdXQoKSkK
ICAgICAgICAgZC0+bV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZShzaXplKTsKICAgICBl
bHNlIHsKLSAgICAgICAgV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBjb29yZGlu
YXRvciA9IGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7CisgICAgICAg
IFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdG9yID0gZHJh
d2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CiAgICAgICAgIGlmICgh
Y29vcmRpbmF0b3IpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvb3JkaW5hdG9yLT5z
ZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSkpOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciog
UVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKICAgICBXZWJLaXQ6OkRyYXdp
bmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gZC0+bV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVh
KCk7CiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViS2l0
OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5ID0g
ZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBpZiAoIWxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJlYS0+Y29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICBpZiAoIWNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiB9CiAKIHZvaWQgUVJh
d1dlYlZpZXc6OnBhaW50KGNvbnN0IFFNYXRyaXg0eDQmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0
eSwgdW5zaWduZWQgcGFpbnRGbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MzFiZWJhMGY3MWVmMTYyNGJi
ODgwNjgyYjBlN2ZlYjA5NGY2NWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CisKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQorICAgIDogbV9kcmF3
aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCisgICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVm
KG5ldyBMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCisgICAgLCBtX2xhc3RTZW50U2NhbGUoMCkK
K3sKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6On5Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSgpCit7CisgICAgbV9yZW5kZXJlci0+ZGV0YWNoKCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBt
X2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JM
YXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRh
dGVJbmZvLnNjYWxlRmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYktp
dDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgU3VyZmFjZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lEKTsKKyAgICBBU1NF
UlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRp
bGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0
LCB0aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVy
LmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgQVNTRVJUKCFtX3N1cmZhY2Vz
LmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lELCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpCit7CisgICAg
QVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3VyZmFjZXMucmVt
b3ZlKGF0bGFzSUQpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpk
ZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1f
cmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgaW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0
KCksIGlkLCBjaGlsZHJlbikpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQor
eworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZp
bHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQoreworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3Jl
bmRlcmVyLmdldCgpLCBpZCkpOworfQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5k
ZXJlci5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7Cit9CisjZW5kaWYKKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkK
K3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXll
ckNoYW5nZXMsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworI2lm
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGNvbnRlbnRzU2l6ZSk7CisgICAgVU5VU0VEX1BBUkFNKGNvdmVyZWRSZWN0
KTsKKyNlbmRpZgorfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tp
bmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
SW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlE
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFja2luZywgbV9y
ZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUp
Cit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRl
bnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQor
eworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFu
aW1hdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBs
b2NrZWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dEFuaW1hdGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOworfQorCit2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IpCit7CisgICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBhZGp1c3Qgdmll
d3BvcnQtZml4ZWQgbGF5ZXJzLgorICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgpLCByZWN0KSk7
CisKKyAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2NhbGUgPT0gbV9s
YXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlW
ZWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgp
LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6U2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChyZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgbV9sYXN0U2VudFZpc2libGVS
ZWN0ID0gcmVjdDsKKyAgICBtX2xhc3RTZW50U2NhbGUgPSBzY2FsZTsKKyAgICBtX2xhc3RTZW50
VHJhamVjdG9yeVZlY3RvciA9IHRyYWplY3RvcnlWZWN0b3I7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCit7CisgICAgbV9kcmF3aW5n
QXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnBhZ2VJRCgpKTsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRpb25GcmFt
ZSgpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlcXVl
c3RBbmltYXRpb25GcmFtZSwgbV9yZW5kZXJlci5nZXQoKSkpOworICAgIHVwZGF0ZVZpZXdwb3J0
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmFuaW1hdGlvbkZy
YW1lUmVhZHkoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6QW5pbWF0aW9uRnJhbWVS
ZWFkeSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorI2VuZGlm
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5k
ZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NT
dXJmYWNlVG9rZW4mIHRva2VuKQoreworICAgIEdyYXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFj
ZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGlj
c1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2FudmFz
U2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0
b2tlbikpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c3luY0Nh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3Jl
bmRlcmVyLmdldCgpLCBpZCwgZnJvbnRCdWZmZXIpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52
YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisjZW5kaWYKKwordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBtX3N1cmZh
Y2VzLmNsZWFyKCk7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9y
ZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJiBjb2xvcikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6c2V0QmFja2dyb3VuZENvbG9yLCBtX3JlbmRlcmVyLmdldCgpLCBjb2xvcikp
OworfQorCit9CisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2NhODk2MTJlZGUzMzgxMTY4ZWJmNDY0YWRjOWVjNzM3ZDBhNDU4ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlfaAorI2RlZmluZSBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5m
by5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJSZWdpb24uaCIK
KyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVk
U3VyZmFjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyQW5pbWF0aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGlt
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsK
K2NsYXNzIExheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclVwZGF0ZUlu
Zm87CisKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOworICAgIH5Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSgpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2b2lkIHNl
dENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZv
aWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2Vi
Q29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZUN1c3RvbUZp
bHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdM
YXllcihDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOworICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBj
b3ZlcmVkUmVjdCk7CisgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxh
cyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKKyAg
ICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKKyAgICB2b2lkIGNyZWF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHVwZGF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRl
ZFN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6
Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICB2b2lkIHVwZGF0ZVZp
ZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIGRpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c1N1cmZhY2VUb2tlbiYpOworICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEKTsKKyNlbmRpZgorICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAg
TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICB2
b2lkIHNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCk7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CisgICAgdm9pZCBh
bmltYXRpb25GcmFtZVJlYWR5KCk7CisjZW5kaWYKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xv
cihjb25zdCBXZWJDb3JlOjpDb2xvciYpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkaXNwYXRj
aFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBEcmF3aW5nQXJlYVByb3h5
KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiBtX3Jl
bmRlcmVyOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7Cisg
ICAgZmxvYXQgbV9sYXN0U2VudFNjYWxlOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0
U2VudFRyYWplY3RvcnlWZWN0b3I7CisgICAgdHlwZWRlZiBIYXNoTWFwPGludCAvKiBhdGxhc0lE
ICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+IFN1cmZhY2VNYXA7CisgICAgU3VyZmFj
ZU1hcCBtX3N1cmZhY2VzOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY3
ODk4OTA0MmQwMGFlZmNjYjA5MDQyODMxY2JhY2NmYzgzYWIzOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsNTkgQEAKKyMKKyMgICAg
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisj
CisjICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisjICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisjCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCitt
ZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB7CisgICAgU2V0Q29tcG9z
aXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZv
IGxheWVySW5mbykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4odWludDMyX3QgaWQs
IFZlY3Rvcjx1aW50MzJfdD4gY2hpbGRyZW4pCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IFNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpGaWx0ZXJP
cGVyYXRpb25zIGZpbHRlcnMpCisjZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvIHByb2dyYW1JbmZvKQorICAgIFJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkKQorI2VuZGlmCisgICAgU2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCisg
ICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcih1aW50MzJfdCBpZCkKKyAgICBDcmVhdGVUaWxlRm9y
TGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0
IHRpbGVSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgVXBk
YXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29y
ZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
KQorICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQpCisgICAgQ3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFuZGxlKQorICAgIFJlbW92ZVVwZGF0ZUF0bGFzKGludCBh
dGxhc0lEKQorICAgIENyZWF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlEKQorICAgIFVw
ZGF0ZUltYWdlQmFja2luZyh1aW50NjRfdCBpbWFnZUlELCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVk
U3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKKyAgICBDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKHVp
bnQ2NF90IGltYWdlSUQpCisgICAgUmVtb3ZlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQp
CisgICAgRGlkUmVuZGVyRnJhbWUoV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUsIFdlYkNv
cmU6OkludFJlY3QgY292ZXJlZFJlY3QpCisgICAgRGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oV2Vi
Q29yZTo6RmxvYXRQb2ludCBwb3NpdGlvbikKKyAgICBTZXRMYXllckFuaW1hdGlvbnModWludDMy
X3QgaWQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFuaW1hdGlvbnMpCisgICAg
U2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKKworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKKyAgICBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQorI2VuZGlmCisKKyNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBDcmVhdGVDYW52YXModWludDMyX3QgaWQsIFdl
YkNvcmU6OkludFNpemUgY2FudmFzU2l6ZSwgV2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4g
dG9rZW4pCisgICAgU3luY0NhbnZhcyh1aW50MzJfdCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
CisgICAgRGVzdHJveUNhbnZhcyh1aW50MzJfdCBpZCkKKyNlbmRpZgorCisgICAgU2V0QmFja2dy
b3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ZWIxNDkzYWQxYWE4MjBiNjYxNmI3MDQ3NjhhM2Y1YWU3YmY0MzE1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0g
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNp
bmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCi0KLSNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVySW5mby5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZXMu
aCIKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8u
aCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0Fy
ZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcg
TGF5ZXJUcmVlUmVuZGVyZXIodGhpcykpKQotICAgICwgbV9sYXN0U2VudFNjYWxlKDApCi17Ci19
Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6On5MYXllclRyZWVDb29yZGluYXRvclByb3h5
KCkKLXsKLSAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5
LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAg
IG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRl
cmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IpKTsKLSAg
ICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5m
byk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlVGlsZUZvckxh
eWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQotewotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVw
ZGF0ZUluZm8uYXRsYXNJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fc3VyZmFjZXMuZW5kKCkpOwot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBt
X3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxl
VXBkYXRlKHVwZGF0ZUluZm8udXBkYXRlUmVjdCwgdGlsZVJlY3QsIGl0LT52YWx1ZSwgdXBkYXRl
SW5mby5zdXJmYWNlT2Zmc2V0KSkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OnJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpyZW1vdmVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRs
YXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAg
ICBBU1NFUlQoIW1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMu
YWRkKGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBh
dGxhc0lEKQotewotICAgIEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAg
ICBtX3N1cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
LXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5
ZXIsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQot
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5
ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9yZW5kZXJlci5nZXQo
KSwgaWQsIGluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRD
b21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0
KCksIGlkLCBjaGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVy
cywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVD
dXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZM
YXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5n
ZXQoKSwgaWQpKTsKLX0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dy
YW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIHByb2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1Np
emUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQotewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5k
ZXJlci5nZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1l
KGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29u
dGVudHNTaXplKTsKLSAgICBVTlVTRURfUEFSQU0oY292ZXJlZFJlY3QpOwotI2VuZGlmCi19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgp
LCBpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVy
LmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvclByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxv
YXRTaXplJiBjb250ZW50c1NpemUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNT
aXplKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0TGF5ZXJBbmlt
YXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlv
bnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldExheWVyQW5pbWF0aW9ucywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGFuaW1hdGlv
bnMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRBbmltYXRpb25z
TG9ja2VkKGJvb2wgbG9ja2VkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgpLCBsb2NrZWQp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBh
ZGp1c3Qgdmlld3BvcnQtZml4ZWQgbGF5ZXJzLgotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgp
LCByZWN0KSk7Ci0KLSAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2Nh
bGUgPT0gbV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRy
YWplY3RvcnlWZWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKSwg
bV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLSAgICBtX2xhc3RTZW50Vmlz
aWJsZVJlY3QgPSByZWN0OwotICAgIG1fbGFzdFNlbnRTY2FsZSA9IHNjYWxlOwotICAgIG1fbGFz
dFNlbnRUcmFqZWN0b3J5VmVjdG9yID0gdHJhamVjdG9yeVZlY3RvcjsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNv
b3JkaW5hdG9yOjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCkt
PnBhZ2VJRCgpKTsKLX0KLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVxdWVzdEFuaW1h
dGlvbkZyYW1lLCBtX3JlbmRlcmVyLmdldCgpKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkK
LXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvcjo6QW5pbWF0aW9uRnJhbWVSZWFkeSgpLCBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdldCgpLCBwb3NpdGlv
bikpOwotfQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHk6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IElu
dFNpemUmIGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsK
LSAgICBHcmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFj
ZTo6U3VwcG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJp
bmc7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNh
bnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6
Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4pKSk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQs
IHVpbnQzMl90IGZyb250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZnJvbnRCdWZm
ZXIpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95Q2FudmFz
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0K
LSNlbmRpZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0
b3JlcygpCi17Ci0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1fcmVuZGVyZXIu
Z2V0KCksIGNvbG9yKSk7Ci19Ci0KLX0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjYxYjNmZWMxZDQ2ODA0ZGI2MGM0N2YwZTVjZDcy
M2U2NGUyZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gICAg
Q29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCi0jZGVmaW5l
IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotCi0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKLSNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0j
aW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1
cmZhY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87Ci1j
bGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJVcGRhdGVJbmZv
OwotCi1jbGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShMYXllclRyZWVDb29yZGluYXRvclByb3h5KTsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
KERyYXdpbmdBcmVhUHJveHkqKTsKLSAgICB+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOwot
ICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29u
c3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJD
aGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+Jik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBjcmVh
dGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlk
KTsKLSNlbmRpZgotICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExh
eWVySUQpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklEKTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
KTsKLSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpOwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
Y29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAg
dm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwot
ICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
KTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCwgY29u
c3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKGludCBhdGxhc0lEKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYp
OwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSAgICB2b2lkIHJl
bmRlck5leHRGcmFtZSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAg
dm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIp
OwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOwotI2VuZGlmCi0g
ICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBMYXllclRyZWVSZW5kZXJlciogbGF5
ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0gICAg
dm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tl
ZChib29sKTsKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgdm9pZCBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mKTsKLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsK
LSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Ci0gICAgV2ViQ29yZTo6
RmxvYXRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKLSAgICBmbG9hdCBtX2xhc3RTZW50U2Nh
bGU7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8aW50IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+ID4gU3VyZmFjZU1hcDsKLSAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZXM7Ci19Owot
Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNz
YWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdlMTdkYWZjOGZjZTBlNjgx
NWMyYTgyMmJmNTFjMTE4NjE4NWFjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAg
LTEsNTkgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSMg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViS2l0OjpD
b29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRpbmdMYXllckNo
aWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBp
ZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0jaWYgRU5BQkxF
KENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBXZWJD
b3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKLSAgICBSZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQp
Ci0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyB1
cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lE
LCBXZWJLaXQ6OldlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKLSAgICBSZW1v
dmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLSAgICBDcmVhdGVJbWFnZUJhY2tpbmcodWludDY0
X3QgaW1hZ2VJRCkKLSAgICBVcGRhdGVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCwgV2Vi
S2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCi0gICAgQ2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cyh1aW50NjRfdCBpbWFnZUlEKQotICAgIFJlbW92ZUltYWdlQmFja2lu
Zyh1aW50NjRfdCBpbWFnZUlEKQotICAgIERpZFJlbmRlckZyYW1lKFdlYkNvcmU6OkludFNpemUg
Y29udGVudHNTaXplLCBXZWJDb3JlOjpJbnRSZWN0IGNvdmVyZWRSZWN0KQotICAgIERpZENoYW5n
ZVNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgcG9zaXRpb24pCi0gICAgU2V0TGF5
ZXJBbmltYXRpb25zKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyBhbmltYXRpb25zKQotICAgIFNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCi0KLSNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgUmVxdWVzdEFuaW1hdGlvbkZy
YW1lKCkKLSNlbmRpZgotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgQ3JlYXRlQ2Fu
dmFzKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpJbnRTaXplIGNhbnZhc1NpemUsIFdlYkNvcmU6Okdy
YXBoaWNzU3VyZmFjZVRva2VuIHRva2VuKQotICAgIFN5bmNDYW52YXModWludDMyX3QgaWQsIHVp
bnQzMl90IGZyb250QnVmZmVyKQotICAgIERlc3Ryb3lDYW52YXModWludDMyX3QgaWQpCi0jZW5k
aWYKLQotICAgIFNldEJhY2tncm91bmRDb2xvcihXZWJDb3JlOjpDb2xvciBjb2xvcikKLX0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmluZGV4IDYzNDFkMzU1YmZl
ODcxN2NmYzAxNmQwOWFlNmNhZTE5ZjQ4Yzk0YjUuLjdjNjM0NTI4OGEzZWI5MzM3Y2RjZmU0NjI1
OWNmZDQ0NmE5OGNkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKQEAg
LTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VJRC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQmFja2luZ1N0b3JlLmgiCkBAIC03MSw4ICs3MSw4IEBAIHN0YXRpYyBib29sIGxheWVyU2hv
dWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBsYXllcikKICAgICByZXR1cm4gbGF5
ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVyLT5jb250ZW50c0FyZVZpc2libGUoKSAmJiAhbGF5
ZXItPnNpemUoKS5pc0VtcHR5KCk7CiB9CiAKLUxheWVyVHJlZVJlbmRlcmVyOjpMYXllclRyZWVS
ZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclBy
b3h5KQotICAgIDogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KGxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkpCitMYXllclRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVlUmVuZGVyZXIoQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQorICAg
IDogbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShjb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiAgICAgLCBtX3Jvb3RMYXllcklEKElu
dmFsaWRDb29yZGluYXRlZExheWVySUQpCiAgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2Up
CkBAIC0xNTQsOCArMTU0LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHIKIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQogewogICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAg
bV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5hbmltYXRpb25GcmFtZVJlYWR5KCk7CisgICAg
aWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHktPmFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKIH0KIAogdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKQEAgLTIwMCw4ICsyMDAs
OCBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+dXBk
YXRlVmlld3BvcnQoKTsKKyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkK
KyAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlVmlld3BvcnQo
KTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExh
eWVycygpCkBAIC02MDksOCArNjA5LDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hM
YXllckNoYW5nZXMoKQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUo
KQogewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cmVuZGVyTmV4dEZyYW1lKCk7CisgICAgaWYgKG1fY29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRl
cmVyOjplbnN1cmVSb290TGF5ZXIoKQpAQCAtNjc0LDggKzY3NCw4IEBAIHZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpw
dXJnZUJhY2tpbmdTdG9yZXMoKQogewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+cHVyZ2VCYWNraW5nU3Rv
cmVzKCk7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAgICAg
IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwog
fQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykK
QEAgLTcwNSw3ICs3MDUsNyBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBbmltYXRpb25z
TG9ja2VkKGJvb2wgbG9ja2VkKQogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSA9IDA7CisgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IDA7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmluZGV4IGE2NzIy
NzQwOWU3ZjAwZmVjYzAwNzMxNzZlMWZlZDBkN2M4NTVmYjUuLjY5YjgxYTQ5YmJiMTE0NzU1NjA0
YjdhYmRjYzIxYTU4ZWU1NDc0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaApA
QCAtNDcsNyArNDcsNyBAQCBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7Ci1jbGFzcyBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CiBj
bGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJVcGRhdGVJ
bmZvOwogCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgfTsKLSAgICBleHBsaWNpdCBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVDb29yZGluYXRv
clByb3h5Kik7CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVuZGVyZXIoQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVSZW5kZXJlcigpOwogICAg
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29u
dGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKQEAgLTgyLDcgKzgy
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCBhcHBlbmRVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogCi0gICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBt
dXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVz
ZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVycyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2Vz
LiBTZWUgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LgorICAgIC8vIFRoZSBwYWludGluZyB0
aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byB1c2UgYmVsb3cgdHdvIG1ldGhvZHMs
IGJlY2F1c2UgdHdvIG1ldGhvZHMgYWNjZXNzIG1lbWJlcnMgdGhhdCB0aGUgbWFpbiB0aHJlYWQg
bWFuYWdlcy4gU2VlIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuCiAgICAgLy8gQ3Vy
cmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0aGUgbWFpbiB0
aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgogICAgIHZvaWQgcHVyZ2VHTFJlc291
cmNlcygpOwogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIC8vIEJlbG93IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBi
eSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhl
IG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3RoIG1lbWJlcnMuCi0gICAgTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eSogbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OworICAgIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5KiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OwogICAg
IGJvb2wgbV9pc0FjdGl2ZTsKIAogICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBt
X3Jvb3RMYXllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmNwcAppbmRleCA5MDBkNmE1ODgyZmYyNDk4MjdiNjA0MmZmNTNiMDZlNzUzZTY3ZmFmLi4wN2Vh
YTNhYzM1MjM5OGM3YzBjODk4NTNkN2M4NGEzMjA1Y2NiOTZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSA8Q29yZUlQQy9NZXNzYWdlSUQuaD4K
ICNlbmRpZgogCkBAIC02OSw3ICs2OSw3IEBAIFdlYkNvcmU6OkludFJlY3QgRHJhd2luZ0FyZWFQ
cm94eTo6Y29udGVudHNSZWN0KCkgY29uc3QKICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6
emVybygpLCBtX3dlYlBhZ2VQcm94eS0+dmlld1NpemUoKSk7CiB9CiAKLXZvaWQgRHJhd2luZ0Fy
ZWFQcm94eTo6ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNv
ZGVyJikKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eTo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGQ2Nzk5ZGQ1YmU5MGJiYTMy
YzEzZTE3OTVhZTUxNDNmMDFmOWVjMDYuLjFlYjE4MTk1MWIwYmViZDA4MTU4N2M5YWNjODRiN2Ey
NDVlM2M0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk7CitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNzIFVwZGF0
ZUluZm87CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKQEAgLTg1LDkgKzg1LDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gY29udGVudHNSZWN0
KCk7IH0KICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7
Ci0gICAgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5nZXQoKTsgfQor
ICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Z2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIC8qIHZpc2libGVDb250ZW50c1JlY3QgKi8sIGZsb2F0IC8qIHNj
YWxlICovLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiAvKiB0cmFqZWN0b3J5VmVjdG9yICov
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJ
UEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKIAogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5OyB9CiAjZW5kaWYKQEAgLTEwMSw3
ICsxMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNl
dDsKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBPd25QdHI8TGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eT4gbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5OworICAgIE93blB0
cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4gbV9jb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggMTM4ZjRjODg3MGI5OTgwZjY1MDc3
YWI4MmVmOTViMjRmNzk1YzFmZi4uNGNiMzRhNDJmNDhlYzViOWNjZGRhZWIwNjczYjA0Y2M2NGYy
MGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4K
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJMYXllclRyZWVDb29y
ZGluYXRvclByb3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
aCIKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYxLDcgKzYxLDcgQEAg
RHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKFdlYlBhZ2VQcm94eSog
d2ViUGFnZVByb3h5KQogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICAvLyBDb25z
dHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFsbG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhl
IHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVudGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkp
Ci0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXll
clRyZWVDb29yZGluYXRvclByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9jb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSh0aGlzKSk7CiAjZW5kaWYKIH0KIApAQCAtMzYwLDIyICszNjAsMjIgQEAgdm9pZCBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXgKICAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0Owog
ICAgIG1fd2ViUGFnZVByb3h5LT5lbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVy
VHJlZUNvbnRleHQpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAoIW1f
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRv
clByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkodGhpcykpOwor
ICAgIGlmICghbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9jb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSh0aGlzKSk7CiAjZW5kaWYKIH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLXZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVD
b29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBD
b3JlSVBDOjpNZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVj
b2RlcikKK3ZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmRpZFJlY2VpdmVDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwg
Q29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImIGRl
Y29kZXIpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICAgICAg
bV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKKyAgICBpZiAo
bV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9jb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwogfQogCiB2b2lkIERyYXdp
bmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVDb29yZGluYXRvclByb3h5LT5zZXRW
aXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QsIHNjYWxlLCB0cmFqZWN0b3J5
VmVjdG9yKTsKKyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAg
ICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dCh2aXNpYmxlQ29udGVudHNSZWN0LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7CiB9CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwu
aAppbmRleCBmZTA1MTBlZjg2MWQ0Zjk2ZjEwMGJlZmYyNWNiMmYwZjkxNzRlMGE3Li42Y2VkMjA3
YjRjYzY5OGI3ZDJhNWMzZjZhMmI3ZGEzY2JiYjIxZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaApAQCAtMzksNyArMzksNyBAQCBjbGFz
cyBSZWdpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CiAKIGNsYXNz
IERyYXdpbmdBcmVhUHJveHlJbXBsIDogcHVibGljIERyYXdpbmdBcmVhUHJveHkgewogcHVibGlj
OgpAQCAtODQsNyArODQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpOwogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxl
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KTsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZv
aWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBD
OjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpOwogI2VuZGlmCiAjZWxzZQogICAgIGJvb2wgaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKaW5kZXggMTQwNmIzYjRhN2JhMTY2ZGYwNzc4Y2RhZWQ2OGE5NDYwOTk4
ZDAzNy4uZTQxODk1Nzk0OTA4MTk0NGM2N2ZiMjU0Yjg1NDZlMWRkZTRjYWE4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTk2LDcgKzk2LDcgQEAKICNl
bmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0x
ODYyLDggKzE4NjIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TQogICAgIH0KIAogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1l
c3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk+KCkpIHsKLSAgICAgICAgbV9kcmF3
aW5nQXJlYS0+ZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKGNvbm5l
Y3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBD
OjpNZXNzYWdlQ2xhc3NDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eT4oKSkgeworICAgICAg
ICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xp
ZW50QmFzZS5jcHAKaW5kZXggYjkzNDYzNDZjMzZjMzQ2ZmI5NWUyNGI4MzJjYTYyZTc3YjIyZDEy
MC4uMjczZDA2NDZmOTU1NjI5M2ZjZWUxZWRmMWQ0NjdmNmI5NTZkZDZiOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAKQEAgLTI2LDEwICsy
NiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgi
CiAKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKICNpbmNs
dWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJO
YXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2FjeUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1w
bC5jcHAKaW5kZXggZTU2Njg3NTZkODViYWFjODlhZjg3YmY1Y2Y1OTBhNTUxMTNmYzlmYi4uMTU3
MGJjOTk3ZTRkOTE2MWRhMzllMjM0ZWM3OTU1YTQ4OGI0NzM4OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50TGVnYWN5SW1wbC5jcHAKQEAgLTI3
LDggKzI3LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50TGVn
YWN5SW1wbC5oIgogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIK
ICNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgImV3a192aWV3
LmgiCiAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlkQ2hh
bmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXQKIHZvaWQgUGFn
ZUNsaWVudExlZ2FjeUltcGw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplKQogewogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotICAgIG1fdmll
d0ltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgp
LT5zZXRDb250ZW50c1NpemUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkp
OworICAgIG1fdmlld0ltcGwtPnBhZ2UoKS0+ZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKEZsb2F0U2l6ZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKICAgICBtX3ZpZXdJbXBsLT51cGRhdGUoKTsKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAppbmRleCAwNzQ2ZjY1ZDkyN2ZhMWQ2MjRmNGQ3
NDMwOWVhOTU4OTJhMTQ1NTdmLi5kMTRjNGVkNGI4OWJmYmZkM2YzZDQ2Yjk3MzYwMWY5YTA0NTI4
NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTI4LDggKzI4LDggQEAK
IAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJFd2tWaWV3SW1wbC5oIgotI2luY2x1ZGUg
IkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJl
ci5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtNTYsNyArNTYsNyBAQCBEcmF3aW5nQXJlYVByb3h5KiBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkcmF3aW5nQXJlYSgpIGNvbnN0CiAKIHZv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6c2V0UmVuZGVyZXJBY3RpdmUoYm9v
bCBhY3RpdmUpCiB7Ci0gICAgZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eSgpLT5sYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKKyAgICBkcmF3aW5n
QXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5kZXJl
cigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXpl
KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6
OnVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3cG9ydAogCiB2b2lkIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUpCiB7Ci0gICAgZHJhd2luZ0FyZWEoKS0+bGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5zZXRDb250ZW50c1NpemUoY29udGVudHNTaXplKTsK
KyAgICBkcmF3aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRD
b250ZW50c1NpemUoY29udGVudHNTaXplKTsKICAgICBtX3ZpZXdJbXBsLT51cGRhdGUoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5jcHAKaW5kZXggZDBlOWM2ZDMyYjY3MWQ3YTE1ZDQ0OGI3MDBlMTY0N2EzOGFlM2Zl
Yy4uNTZjZDAwMjQzM2U0M2QwY2E0Yjk2OWUxMjAyNWVkYjZiZjIwNmI3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
CkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2EyMTZm
MzI0MGU1MzUxZTY0ZDlmMjNhMDU3NTk4ZGMwNzkwYWEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMCwwICsxLDgzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3Jh
cGhpY3NBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYUltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5o
IgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJC
YWNraW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzUmVmUHRyPENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdD4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSog
d2ViUGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdCh3ZWJQYWdlKSk7Cit9CisKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6fkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdCgpCit7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOworI2VuZGlmCisKKyAgICAvLyBQcmV2ZW50IHNl
dENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCgwKSAtPiBkZXRhY2hMYXllcigpIGZyb20g
bW9kaWZ5aW5nIHRoZSBzZXQgd2hpbGUgd2UgaXRlcmF0ZSBpdC4KKyAgICBIYXNoU2V0PFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+IHJlZ2lzdGVyZWRMYXllcnM7CisgICAgcmVn
aXN0ZXJlZExheWVycy5zd2FwKG1fcmVnaXN0ZXJlZExheWVycyk7CisKKyAgICBIYXNoU2V0PFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSByZWdpc3Rl
cmVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSByZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnNldENvb3JkaW5hdG9yKDApOworfQorCitD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdl
KiB3ZWJQYWdlKQorICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQorICAgICwgbV9ub3RpZnlB
ZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVmFsaWQodHJ1ZSkKKyAg
ICAsIG1faXNQdXJnaW5nKGZhbHNlKQorICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKHRydWUp
CisgICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQorICAgICwgbV9jb250ZW50c1NjYWxlKDEpCisg
ICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQorICAgICwgbV9zaG91
bGRTeW5jRnJhbWUoZmFsc2UpCisgICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcihmYWxzZSkKKyAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZpcmVkKQorICAgICwgbV9yZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCisgICAgLCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZCh0cnVlKQorICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkKKyAgICAs
IG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKK3sKKyAgICAvLyBDcmVhdGUgYSByb290IGxheWVy
LgorICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5ZXIgPSB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgY29vcmRpbmF0
ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9y
b290TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCByb290IGxheWVyIik7
CisjZW5kaWYKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICBt
X3Jvb3RMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgbV9sYXllclRyZWVD
b250ZXh0LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNv
b3JkaW5hdGVkUm9vdExheWVyKS0+aWQoKTsKKworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Qgbm9uLWNvbXBvc2l0ZWQgY29udGVudCIpOworI2VuZGlmCisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKworICAg
IG1fcm9vdExheWVyLT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIuZ2V0KCkp
OworCisgICAgaWYgKG1fd2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkKKyAgICAgICAgY3JlYXRl
UGFnZU92ZXJsYXlMYXllcigpOworCisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQoYm9vbCBsYXllckZsdXNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9sYXllckZsdXNoU2No
ZWR1bGluZ0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJs
ZWQ7CisKKyAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKKyAgICAgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYW5j
ZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2NoZWR1bGVMYXllckZsdXNoKCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxp
bmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZs
dXNoKCkKK3sKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXll
ckZsdXNoKGJvb2wgbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQoreworICAgIG1fbm90
aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZs
dXNoOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRDb250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRy
YXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2UtPmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KCkpOworCisgICAgLy8gQWRkIHRoZSBhY2NlbGVyYXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4K
KyAgICBpZiAoZ3JhcGhpY3NMYXllcikKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExh
eWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmludmFsaWRhdGUoKQoreworICAgIGNhbmNlbFBlbmRpbmdMYXllckZsdXNoKCk7
CisKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICBtX3Jvb3RMYXllciA9IG51bGxwdHI7Cisg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiByZWN0KQoreworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCisgICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworCisgICAg
c2NoZWR1bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Ny
b2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xsT2Zmc2V0ICovKQorewor
ICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNjcm9sbFJlY3QpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KCkKK3sKKyAgICAv
LyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgcnVubmluZyBsYXlvdXQgdGVzdHMuIFNpbmNlIGluIHRo
aXMgY2FzZSB3ZSBhcmUgbm90IHdhaXRpbmcgZm9yIGEgVUlQcm9jZXNzIHRvIHJlcGx5IG5pY2Vs
eS4KKyAgICAvLyBJbnN0ZWFkIHdlIGFyZSBqdXN0IHRyaWdnZXJpbmcgZm9yY2VSZXBhaW50LiBC
dXQgd2Ugc3RpbGwgd2FudCB0byBoYXZlIHRoZSBzY3JpcHRlZCBhbmltYXRpb24gY2FsbGJhY2tz
IGJlaW5nIGV4ZWN1dGVkLgorICAgIHN5bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIG5l
ZWQgdG8gc2NoZWR1bGUgYW5vdGhlciBmbHVzaCwgb3RoZXJ3aXNlIHRoZSBmb3JjZWQgcGFpbnQg
bWlnaHQgY2FuY2VsIGEgbGF0ZXIgZXhwZWN0ZWQgZmx1c2guCisgICAgLy8gVGhpcyBpcyBhbGln
bmVkIHdpdGggTGF5ZXJUcmVlSG9zdENBLgorICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAg
IGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOworfQorCitib29sIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICAv
LyBXZSBleHBlY3QgdGhlIFVJIHByb2Nlc3MgdG8gbm90IHJlcXVpcmUgYSBuZXcgcmVwYWludCB1
bnRpbCB0aGUgcHJldmlvdXMgb25lIGhhcyBmaW5pc2hlZC4KKyAgICBBU1NFUlQoIW1fZm9yY2VS
ZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKKyAgICBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJ
RCA9IGNhbGxiYWNrSUQ7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzaXplRGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fcm9vdExheWVyLT5z
aXplKCkgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPnNl
dFNpemUobmV3U2l6ZSk7CisKKyAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBhcmVh
cyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBuZWVk
ZWQKKyAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KKyAgICBGbG9hdFNpemUg
b2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOworICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKKworICAgIGlmIChuZXdT
aXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKKyAgICAgICAgZmxvYXQgaGVpZ2h0ID0g
c3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXplLmhl
aWdodCgpKTsKKyAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0aCgp
IC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBpZiAobmV3U2l6ZS5o
ZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhlaWdo
dCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdodCgp
KSk7CisKKyAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5
TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7CisKKyAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRpZEluc3RhbGxQYWdlT3ZlcmxheSgp
Cit7CisgICAgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkoKQoreworICAgIGRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCk7CisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRQ
YWdlT3ZlcmxheU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQorewor
ICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5
KGZsb2F0IHZhbHVlKQoreworICAgIEFTU0VSVChtX3BhZ2VPdmVybGF5TGF5ZXIpOworICAgIG1f
cGFnZU92ZXJsYXlMYXllci0+c2V0T3BhY2l0eSh2YWx1ZSk7CisgICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoKQoreworICAgIGlmIChtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVl
ZGVkKCk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xh
eWVyT25seSgpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIp
CisgICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOworCisgICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJm
cmFtZXMoKTsKKworICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6RGVsZXRlQ29tcG9zaXRpbmdMYXllcihtX2RldGFjaGVkTGF5ZXJzW2ldKSk7CisgICAg
bV9kZXRhY2hlZExheWVycy5jbGVhcigpOworCisgICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7
CisgICAgICAgIGRpZFN5bmMgPSB0cnVlOworCisgICAgICAgIEludFNpemUgY29udGVudHNTaXpl
ID0gcm91bmRlZEludFNpemUobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwor
ICAgICAgICBJbnRSZWN0IGNvdmVyZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7CisgICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OkRpZFJlbmRlckZyYW1lKGNvbnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpKTsKKyAgICAgICAgbV93
YWl0aW5nRm9yVUlQcm9jZXNzID0gdHJ1ZTsKKyAgICAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSBm
YWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgdW5sb2NrQW5pbWF0aW9ucygpOworCisgICAgaWYg
KG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2sobV9mb3JjZVJlcGFpbnRBc3lu
Y0NhbGxiYWNrSUQpKTsKKyAgICAgICAgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQgPSAw
OworICAgIH0KKworICAgIHJldHVybiBkaWRTeW5jOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQorewor
ICAgIGlmIChtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIodG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7CisgICAgbV9kaWRJbml0aWFsaXplUm9v
dENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
K30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllclN0YXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGluZm8pCit7Cisg
ICAgaWYgKG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpKSk7Cisg
ICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gZmFsc2U7CisgICAgfQor
CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJT
dGF0ZShpZCwgaW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3lu
Y0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVl
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRyZW4pKTsKK30KKwor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZh
c1BsYXRmb3JtTGF5ZXIpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIEdy
YXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NT
dXJmYWNlVG9rZW4oKTsKKyAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxh
eWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUNhbnZhcyhpZCwgY2FudmFzU2l6
ZSwgdG9rZW4pKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxh
eWVyKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICB1aW50MzJfdCBmcm9u
dEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwor
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OlN5bmNDYW52YXMoaWQsIGZyb250QnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAg
ICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzeW5jTGF5
ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7
CisjZW5kaWYKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhpZCwgZmlsdGVycykpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgb2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRvIHNlcmlhbGl6
ZSB0aGUKKyAgICAvLyBjdXN0b20gZmlsdGVycyB0byB0aGUgb3RoZXIgcHJvY2Vzcy4gVGhhdCdz
IGJlY2F1c2UgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG5lZWRzCisgICAgLy8gdG8gbGlu
ayBiYWNrIHRvIHRoZSBjb29yZGluYXRvciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBhIG1lc3NhZ2Ug
dG8gdGhlIFVJIHByb2Nlc3Mgd2hlbgorICAgIC8vIHRoZSBwcm9ncmFtIGlzIG5vdCBuZWVkZWQg
YW55bW9yZS4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIHNlcmlhbGl6YXRpb24gd2lsbCBvbmx5IGhh
cHBlbiBhdCBhIGxhdGVyIHRpbWUgaW4gQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zPjo6ZW5jb2RlLgorICAgIC8vIEF0IHRoYXQgcG9pbnQgdGhlIHByb2dyYW0gd2lsbCBv
bmx5IGJlIHNlcmlhbGl6ZWQgb25jZS4gQWxsIHRoZSBvdGhlciB0aW1lcyBpdCB3aWxsIG9ubHkg
dXNlIHRoZSBJRCBvZiB0aGUgcHJvZ3JhbS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
bHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmlsdGVyT3BlcmF0aW9uKiBvcGVy
YXRpb24gPSBmaWx0ZXJzLmF0KGkpOworICAgICAgICBpZiAob3BlcmF0aW9uLT5nZXRPcGVyYXRp
b25UeXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpWQUxJREFURURfQ1VTVE9NKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
biogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKGN1c3RvbU9wZXJhdGlv
bi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT5pc0luaXRpYWxpemVkKCkpOworICAgICAgICBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1Db21waWxlZFByb2dyYW0qIHByb2dyYW0gPSBjdXN0b21PcGVyYXRpb24t
PnZhbGlkYXRlZFByb2dyYW0oKS0+cGxhdGZvcm1Db21waWxlZFByb2dyYW0oKTsKKworICAgICAg
ICBSZWZQdHI8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHk7CisgICAgICAgIGlmIChwcm9ncmFtLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSo+KHByb2dyYW0tPmNsaWVudCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eS0+Y2xpZW50KCkpIHsKKyAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+
c2V0Q2xpZW50KHRoaXMpOworICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmlkKCksIGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVk
UHJvZ3JhbSgpLT52YWxpZGF0ZWRQcm9ncmFtSW5mbygpKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgY2xpZW50IHdhcyBub3QgZGlzY29ubmVjdGVkIHRoZW4gdGhp
cyBjb29yZGluYXRvciBtdXN0IGJlIHRoZSBjbGllbnQgZm9yIGl0LgorICAgICAgICAgICAgQVNT
RVJUKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkgPT0gdGhpcyk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZW1vdmVDdXN0
b21GaWx0ZXJQcm9ncmFtUHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkpCit7CisgICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMg
bm90IG5lZWRlZCBhbnltb3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZAorICAg
IC8vIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBvdGhlciBwcm9jZXNzIHRvIGRlbGV0ZSBpdC4KKyAg
ICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkp
OworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OlJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
LT5pZCgpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaXNjb25uZWN0
Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFdlYkNvcmUg
d2lsbCBub3QgY2FsbCBpbnRvIHRoaXMgY29vcmRpbmF0b3IgYW55bW9yZS4KKyAgICBIYXNoU2V0
PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+OjppdGVyYXRvciBpdGVyID0gbV9jdXN0b21G
aWx0ZXJQcm9ncmFtcy5iZWdpbigpOworICAgIGZvciAoOyBpdGVyICE9IG1fY3VzdG9tRmlsdGVy
UHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+c2V0Q2xpZW50KDApOwor
fQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcihD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIG1fcmVnaXN0ZXJlZExheWVy
cy5yZW1vdmUobGF5ZXIpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2Rl
dGFjaGVkTGF5ZXJzLmFwcGVuZChsYXllci0+aWQoKSk7CisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYoUmVu
ZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIC8vIFRoZXNlIGNvbmRpdGlvbnMgbXVzdCBt
YXRjaCB0aGUgY29uZGl0aW9ucyBpbiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JQb3NpdGlvbi4KKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBy
ZW5kZXJMYXllci0+YmFja2luZygpOworICAgIGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPnN0
eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5k
ZXJMYXllci0+cmVuZGVyZXIoKS0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgcmVuZGVyTGF5
ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+Y29udGFp
bmVyKCktPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlbmRl
ckxheWVyLT5pc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCkpOworICAgIGdyYXBoaWNzTGF5ZXItPnNl
dEZpeGVkVG9WaWV3cG9ydCh0cnVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0RnJv
bVZpZXdwb3J0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQoreworICAgIHVwZGF0
ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYocmVuZGVyTGF5ZXIpOworCisgICAgaWYgKHJlbmRl
ckxheWVyLT5maXJzdENoaWxkKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZv
ckxheWVyKHJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpOworICAgIGlmIChyZW5kZXJMYXllci0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIo
cmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6c3luY0ZpeGVkTGF5ZXJzKCkKK3sKKyAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5h
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmhhc1Zp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRl
ckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50
UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290UmVuZGVyTGF5ZXIoKTsKKyAgICBBU1NFUlQo
cm9vdFJlbmRlckxheWVyKTsKKyAgICBpZiAocm9vdFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkp
CisgICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXll
ci0+Zmlyc3RDaGlsZCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Omxv
Y2tBbmltYXRpb25zKCkKK3sKKyAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNl
dEFuaW1hdGlvbnNMb2NrZWQodHJ1ZSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6dW5sb2NrQW5pbWF0aW9ucygpCit7CisgICAgaWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGZhbHNlOworICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OlNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAgICBpZiAobV9pc1N1
c3BlbmRlZCB8fCBtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFdlIGxvY2sgdGhlIGFuaW1hdGlvbnMgd2hpbGUgcGVyZm9ybWluZyBsYXlvdXQsIHRvIGF2
b2lkIGZsaWNrZXJzIGNhdXNlZCBieSBhbmltYXRpb25zIGNvbnRpbnVpbmcgaW4gdGhlIFVJIHBy
b2Nlc3Mgd2hpbGUKKyAgICAvLyB0aGUgd2ViIHByb2Nlc3MgbGF5b3V0IHdhbnRzIHRvIGNhbmNl
bCB0aGVtLgorICAgIGxvY2tBbmltYXRpb25zKCk7CisgICAgc3luY0Rpc3BsYXlTdGF0ZSgpOwor
CisgICAgLy8gV2UgY2FuIHVubG9jayB0aGUgYW5pbWF0aW9ucyBiZWZvcmUgZmx1c2hpbmcgaWYg
dGhlcmUgYXJlIG5vIHZpc2libGUgY2hhbmdlcywgZm9yIGV4YW1wbGUgaWYgdGhlcmUgYXJlIGNv
bnRlbnQgdXBkYXRlcworICAgIC8vIGluIGEgbGF5ZXIgd2l0aCBvcGFjaXR5IDAuCisgICAgYm9v
bCBjYW5VbmxvY2tCZWZvcmVGbHVzaCA9ICFtX2lzVmFsaWQgfHwgIXRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7
CisgICAgaWYgKGNhblVubG9ja0JlZm9yZUZsdXNoKQorICAgICAgICB1bmxvY2tBbmltYXRpb25z
KCk7CisKKyAgICBpZiAoIW1faXNWYWxpZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGZs
dXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpKQorICAgICAgICBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0Rpc3Bs
YXlTdGF0ZSgpCit7CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJldmlv
dXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVkIGJl
Zm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgorICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFp
bkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25k
c1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKKyNlbmRpZgorCisgICAgbV93ZWJQYWdl
LT5sYXlvdXRJZk5lZWRlZCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
ZGlkUGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQoreworICAgIGlmIChtX25vdGlmeUFmdGVy
U2NoZWR1bGVkTGF5ZXJGbHVzaCkgeworICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUlt
cGwqPihtX3dlYlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygp
OworICAgICAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOworICAg
IH0KK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyRmx1c2hUaW1lckZp
cmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4qKQoreworICAgIHBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVQYWdlT3ZlcmxheUxheWVyKCkKK3sKKyAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXll
cik7CisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhp
cywgdGhpcyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFt
ZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CisjZW5k
aWYKKworICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7CisKKyAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQobV9wYWdlT3ZlcmxheUxheWVyLmdldCgpKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKK3sK
KyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwor
fQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKEltYWdlKiBpbWFnZSkKK3sKKyAg
ICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQgPSBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChpbWFnZSk7CisgICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAg
IFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gaW1hZ2VCYWNraW5nOworICAgIGlmIChp
dCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKKyAgICAgICAgaW1hZ2VCYWNraW5nID0gQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlzLCBpbWFnZSk7CisgICAgICAgIG1faW1h
Z2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNraW5nKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOworCisgICAgcmV0dXJuIGltYWdlQmFja2luZzsK
K30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNyZWF0ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSYgaGFuZGxlKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVJ
bWFnZUJhY2tpbmcoaW1hZ2VJRCwgaGFuZGxlKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQoreworICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgbV9zaG91
bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1faW1hZ2VCYWNraW5ncy5yZW1vdmUoaW1hZ2VJRCk7
CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQoreworICAg
IEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwor
ICAgIGZvciAoSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnZhbHVlLT51cGRh
dGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSAvKiB0aW1lICov
KQoreworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bm90aWZ5Rmx1c2hSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3sKK30KKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllciwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0Nv
bnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNv
bXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsKKyAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFw
aGljc0NvbnRleHQsIGNsaXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChncmFwaGljc0xheWVyID09IG1fcGFnZU92ZXJsYXlMYXllcikgeworICAgICAgICAvLyBPdmVy
bGF5cyBjb250YWluIHRyYW5zcGFyZW50IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29u
dGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJlbmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChjbGlwUmVjdCk7CisgICAgICAgIG1fd2ViUGFn
ZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBoaWNzQ29udGV4dCwgY2xpcFJlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCitQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBj
bGllbnQpCit7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllciA9IG5ldyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKKyAgICBsYXllci0+c2V0Q29vcmRpbmF0b3Io
dGhpcyk7CisgICAgbV9yZWdpc3RlcmVkTGF5ZXJzLmFkZChsYXllcik7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRzU2NhbGUobV9jb250ZW50c1NjYWxlKTsKKyAgICBsYXllci0+YWRqdXN0VmlzaWJs
ZVJlY3QoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobGF5ZXIpOworfQorCitib29sIExheWVyVHJl
ZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKK3sK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1l
ID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVj
dCwgdXBkYXRlSW5mbykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorewor
ICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlEKSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVVcGRhdGVBdGxhcyhpbnQg
YXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBoYW5kbGUpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0ZUF0bGFzKGludCBhdGxhc0lEKQorewor
ICAgIGlmIChtX2lzUHVyZ2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZVVwZGF0ZUF0
bGFzKGF0bGFzSUQpKTsKK30KKworV2ViQ29yZTo6RmxvYXRSZWN0IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKK30KKworCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFw
aGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7CisgICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9
IGFuaW1hdGlvbnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOworI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9u
cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlm
cmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKKyAgICAg
ICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0
ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1h
dGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlv
blZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0K
KyNlbmRpZgorICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OlNldExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25z
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9p
bnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgYm9vbCBjb250ZW50c1JlY3REaWRDaGFuZ2Ug
PSByZWN0ICE9IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBib29sIGNvbnRlbnRzU2NhbGVE
aWRDaGFuZ2UgPSBzY2FsZSAhPSBtX2NvbnRlbnRzU2NhbGU7CisKKyAgICAvLyBBIHplcm8gdHJh
amVjdG9yeVZlY3RvciBpbmRpY2F0ZXMgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCBhcmUgcmVxdWVzdGVkLgorICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPnNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3Rv
cnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hh
bmdlIHx8IGNvbnRlbnRzU2NhbGVEaWRDaGFuZ2UpIHsKKyAgICAgICAgbV92aXNpYmxlQ29udGVu
dHNSZWN0ID0gcmVjdDsKKyAgICAgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisKKyAgICAg
ICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3Rl
cmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKGNv
bnRlbnRzU2NhbGVEaWRDaGFuZ2UpCisgICAgICAgICAgICAgICAgKCppdCktPnNldENvbnRlbnRz
U2NhbGUoc2NhbGUpOworICAgICAgICAgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkKKyAg
ICAgICAgICAgICAgICAoKml0KS0+YWRqdXN0VmlzaWJsZVJlY3QoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGlmIChtX3dlYlBhZ2UtPnVzZUZp
eGVkTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gUm91bmQgdGhlIHJlY3QgaW5zdGVhZCBvZiBlbmNs
b3NpbmcgaXQgdG8gbWFrZSBzdXJlIHRoYXQgaXRzIHNpemUgc3RheXMKKyAgICAgICAgLy8gdGhl
IHNhbWUgd2hpbGUgcGFubmluZy4gVGhpcyBjYW4gaGF2ZSBuYXN0eSBlZmZlY3RzIG9uIGxheW91
dC4KKyAgICAgICAgbV93ZWJQYWdlLT5zZXRGaXhlZFZpc2libGVDb250ZW50UmVjdChyb3VuZGVk
SW50UmVjdChyZWN0KSk7CisgICAgfQorCisgICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSkK
KyAgICAgICAgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUgPSB0cnVlOworfQorCitH
cmFwaGljc0xheWVyRmFjdG9yeSogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKKyNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2NoZWR1
bGVBbmltYXRpb24oKQoreworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlcXVlc3RBbmltYXRpb25GcmFtZSgpKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQoreworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IGZhbHNlOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdXBkYXRl
QXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsKK30KKworYm9vbCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtX2lzU3VzcGVuZGVkICYmICFtX3dhaXRpbmdGb3JVSVByb2Nlc3M7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworICAgIFRl
bXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5nLCB0cnVlKTsKKwor
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9y
IGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gbV9yZWdpc3RlcmVk
TGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnB1cmdlQmFj
a2luZ1N0b3JlcygpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CisgICAgbV91cGRh
dGVBdGxhc2VzLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiBz
aXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQsIEludFBv
aW50JiBvZmZzZXQpCit7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxhc2VzW2ld
LmdldCgpOworICAgICAgICBpZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEoKSA9PSAoZmxhZ3MgJiBD
b29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEpKSB7CisgICAgICAgICAgICAvLyBUaGlz
IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZS4K
KyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5nT25BdmFp
bGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChncmFw
aGljc0NvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgaW50IFNjcmF0Y2hC
dWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28uCisgICAg
bV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhpcywgU2Ny
YXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgc2NoZWR1bGVSZWxlYXNlSW5hY3Rp
dmVBdGxhc2VzKCk7CisgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJlZ2luUGFp
bnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOworfQorCitjb25z
dCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAwLjU7CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXMoKQoreworICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRSZXBlYXRpbmco
UmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOworfQorCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQoVGltZXI8
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopCit7CisgICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8g
a2VlcCBvbmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFVw
ZGF0ZUF0bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKKyAgICBib29sIGZvdW5kQWN0aXZlQXRsYXNG
b3JOb25Db21wb3NpdGVkQ29udGVudCA9IGZhbHNlOworICAgIGZvciAoaW50IGkgPSBtX3VwZGF0
ZUF0bGFzZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFVwZGF0ZUF0bGFz
KiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFhdGxhcy0+
aXNJblVzZSgpKQorICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNlSW5h
Y3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7CisgICAgICAgIGJvb2wgdXNhYmxlRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKKyAgICAgICAgaWYgKGF0
bGFzLT5pc0luYWN0aXZlKCkpIHsKKyAgICAgICAgICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zv
ck5vbkNvbXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2FibGVGb3JO
b25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFueXdheSA9
IG1fdXBkYXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7CisgICAgICAgICAgICBtX3VwZGF0ZUF0bGFz
ZXMucmVtb3ZlKGkpOworICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRD
b250ZW50KQorICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250
ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21w
b3NpdGVkQ29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKKyAgICAgICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOworCisgICAgaWYgKG1fdXBk
YXRlQXRsYXNlcy5zaXplKCkgPD0gMSkKKyAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
VGltZXIuc3RvcCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0QmFj
a2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3sKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRCYWNr
Z3JvdW5kQ29sb3IoY29sb3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjkzOTM1OTE0
MDJmODczYzM0MzkzZTM4YjczOTQ1NGYyMTI1MTJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0X2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1
ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFz
LmgiCisjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVy
RmFjdG9yeS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKKyNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVXBkYXRlSW5mbzsKK2NsYXNzIFdlYlBhZ2U7
CisKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBMYXllclRyZWVIb3N0
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMgVXBkYXRlQXRsYXNDbGllbnQKKyAgICAsIHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQorI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudAorI2VuZGlmCit7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBjcmVh
dGUoV2ViUGFnZSopOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCgpOwor
CisgICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KCkg
eyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9CisgICAgdmlydHVhbCB2b2lkIHNldExheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVM
YXllckZsdXNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNj
aGVkdWxlZExheWVyRmx1c2goYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJvb3RDb21wb3Np
dGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05l
ZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7CisgICAgdmlydHVhbCB2
b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgYm9vbCBmb3JjZVJlcGFpbnRBc3luYyh1
aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2l6ZURpZENoYW5nZShjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRJbnN0
YWxsUGFnZU92ZXJsYXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVW5pbnN0YWxsUGFnZU92ZXJs
YXkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9wYWNp
dHkoZmxvYXQpOworICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNob3VsZEFwcGx5RmFkZVdo
ZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CisgICAgdmlydHVhbCB2
b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxh
eWVyRmx1c2goKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5n
ZSgpIHsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2UqKSBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7
CisgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIHZpcnR1YWwgYm9v
bCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCBz
Y2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+Jik7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25z
Jik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJG
aWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpOworI2VuZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdmlydHVhbCB2b2lk
IGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVy
SUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpIE9WRVJSSURFOworI2VuZGlmCisgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciopOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKKworICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgaW50JiBh
dGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpOworCisgICAgLy8gVXBkYXRlQXRsYXNDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQsIGNvbnN0IFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVw
ZGF0ZUF0bGFzKGludCBhdGxhc0lEKTsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKKyNl
bmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBPVkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CisKK3ByaXZhdGU6CisgICAgLy8gR3JhcGhpY3NMYXll
ckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSk7CisgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZp
cnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOworCisgICAgLy8gQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNv
bnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKworICAgIHZvaWQgZmx1c2hQZW5kaW5nSW1h
Z2VCYWNraW5nQ2hhbmdlcygpOworCisgICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NM
YXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50KikgT1ZFUlJJREU7CisKKyAgICAvLyBD
b29yZGluYXRlZExheWVyVHJlZUhvc3QKKyAgICB2b2lkIGluaXRpYWxpemVSb290Q29tcG9zaXRp
bmdMYXllcklmTmVlZGVkKCk7CisgICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Cisg
ICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOworICAgIGJvb2wgZmx1c2hQZW5kaW5n
TGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOworICAg
IHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKKyAgICB2b2lkIGRpZFBlcmZvcm1T
Y2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7CisgICAg
dm9pZCBsb2NrQW5pbWF0aW9ucygpOworICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOworCisg
ICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q+Kik7CisKKyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNl
cygpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB2b2lkIGFuaW1h
dGlvbkZyYW1lUmVhZHkoKTsKKyNlbmRpZgorCisgICAgdm9pZCByZWxlYXNlSW5hY3RpdmVBdGxh
c2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+Kik7
CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5Q2xpZW50CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkoV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kik7CisKKyAgICB2b2lkIGNoZWNrQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3hpZXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworICAgIHZv
aWQgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7CisjZW5kaWYKKworICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKworICAgIC8vIFRoZSBsYXll
ciB3aGljaCBjb250YWlucyBhbGwgbm9uLWNvbXBvc2l0ZWQgY29udGVudC4KKyAgICBPd25QdHI8
V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyOworCisg
ICAgLy8gVGhlIHBhZ2Ugb3ZlcmxheSBsYXllci4gV2lsbCBiZSBudWxsIGlmIHRoZXJlJ3Mgbm8g
cGFnZSBvdmVybGF5LgorICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3BhZ2VP
dmVybGF5TGF5ZXI7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcio+IG1fcmVnaXN0ZXJlZExheWVyczsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiBtX2RldGFjaGVkTGF5ZXJzOworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdl
QmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5n
TWFwOworICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPE93
blB0cjxVcGRhdGVBdGxhcz4gPiBtX3VwZGF0ZUF0bGFzZXM7CisKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPiBtX2N1c3Rv
bUZpbHRlclByb2dyYW1zOworI2VuZGlmCisKKyAgICBib29sIG1fbm90aWZ5QWZ0ZXJTY2hlZHVs
ZWRMYXllckZsdXNoOworICAgIGJvb2wgbV9pc1ZhbGlkOworICAgIC8vIFdlIGRvbid0IHNlbmQg
dGhlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byBVSSBQcm9jZXNz
IGR1cmluZyBwdXJnaW5nLCBiZWNhdXNlIFVJIFByb2Nlc3MgYWxyZWFkeSBoYWQgcmVtb3ZlZCBh
bGwgcmVzb3VyY2VzLgorICAgIGJvb2wgbV9pc1B1cmdpbmc7CisKKyAgICBib29sIG1fd2FpdGlu
Z0ZvclVJUHJvY2VzczsKKyAgICBib29sIG1faXNTdXNwZW5kZWQ7CisgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
CisgICAgYm9vbCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZTsKKworICAgIExheWVy
VHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworICAgIGJvb2wgbV9zaG91bGRTeW5jRnJh
bWU7CisgICAgYm9vbCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcjsKKyAgICBX
ZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fbGF5ZXJGbHVzaFRpbWVy
OworICAgIFdlYkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gbV9yZWxlYXNl
SW5hY3RpdmVBdGxhc2VzVGltZXI7CisgICAgYm9vbCBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5h
YmxlZDsKKyAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRDsKKyAgICBi
b29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZiAvLyBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAzN2JmNjlmOWNkYWViY2MyZmViY2ExODg1ZDRkZWIxNmM5ODA1YjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwz
MSBAQAorIworIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisjICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyMgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCittZXNzYWdlcyAtPiBDb29yZGluYXRlZExheWVyVHJlZUhv
c3QgeworICAgIFNldFZpc2libGVDb250ZW50c1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50c1JlY3QsIGZsb2F0IHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IHRyYWplY3Rv
cnlWZWN0b3J5KQorICAgIFJlbmRlck5leHRGcmFtZSgpCisgICAgUHVyZ2VCYWNraW5nU3RvcmVz
KCkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgQW5pbWF0aW9uRnJh
bWVSZWFkeSgpCisjZW5kaWYKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxMTdjZGJhYTY1MDU1YTljNTg3ZWI5MDE5ZDZmY2Y1NGMwZDZmNTE3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDgzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVy
VHJlZUNvb3JkaW5hdG9yLmgiCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNs
dWRlICJEcmF3aW5nQXJlYUltcGwuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJN
ZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldl
YkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJX
ZWJQYWdlUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJm
YWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJCYWNraW5nLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+Ci0jaW5jbHVkZSA8
V2ViQ29yZS9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oPgotI2luY2x1ZGUgPHd0Zi9UZW1w
b3JhcnlDaGFuZ2UuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1QYXNzUmVmUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBMYXll
clRyZWVDb29yZGluYXRvcjo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBMYXllclRyZWVDb29yZGluYXRvcih3ZWJQYWdlKSk7Ci19Ci0KLUxheWVy
VHJlZUNvb3JkaW5hdG9yOjp+TGF5ZXJUcmVlQ29vcmRpbmF0b3IoKQotewotI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKLSNlbmRp
ZgotCi0gICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkg
LT4gZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUg
aXQuCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdp
c3RlcmVkTGF5ZXJzOwotICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXll
cnMpOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6
aXRlcmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0
ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRD
b29yZGluYXRvcigwKTsKLX0KLQotTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OkxheWVyVHJlZUNvb3Jk
aW5hdG9yKFdlYlBhZ2UqIHdlYlBhZ2UpCi0gICAgOiBMYXllclRyZWVIb3N0KHdlYlBhZ2UpCi0g
ICAgLCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkKLSAgICAsIG1faXNW
YWxpZCh0cnVlKQotICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCi0gICAgLCBtX3dhaXRpbmdGb3JV
SVByb2Nlc3ModHJ1ZSkKLSAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCi0gICAgLCBtX2NvbnRl
bnRzU2NhbGUoMSkKLSAgICAsIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlKHRydWUp
Ci0gICAgLCBtX3Nob3VsZFN5bmNGcmFtZShmYWxzZSkKLSAgICAsIG1fZGlkSW5pdGlhbGl6ZVJv
b3RDb21wb3NpdGluZ0xheWVyKGZhbHNlKQotICAgICwgbV9sYXllckZsdXNoVGltZXIodGhpcywg
JkxheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZCkKLSAgICAsIG1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZMYXllclRyZWVDb29yZGluYXRvcjo6cmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpCi0gICAgLCBtX2xheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCh0cnVlKQotICAgICwgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQoMCkK
LSAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKLXsKLSAgICAvLyBDcmVhdGUgYSByb290
IGxheWVyLgotICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRo
aXMpOwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRSb290TGF5ZXIg
PSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgY29v
cmRpbmF0ZWRSb290TGF5ZXItPnNldFJvb3RMYXllcih0cnVlKTsKLSNpZm5kZWYgTkRFQlVHCi0g
ICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNvb3JkaW5hdG9yIHJvb3QgbGF5ZXIi
KTsKLSNlbmRpZgotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAg
IG1fcm9vdExheWVyLT5zZXRTaXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLSAgICBtX2xheWVyVHJl
ZUNvbnRleHQuY29vcmRpbmF0ZWRMYXllcklEID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
Y29vcmRpbmF0ZWRSb290TGF5ZXIpLT5pZCgpOwotCi0gICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOwotI2lmbmRlZiBOREVC
VUcKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5hbWUoIkxheWVyVHJlZUNv
b3JkaW5hdG9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKLSNlbmRpZgotICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0KLSAgICBt
X3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKTsK
LQotICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5KCkpCi0gICAgICAgIGNyZWF0ZVBh
Z2VPdmVybGF5TGF5ZXIoKTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9v
bCBsYXllckZsdXNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGlu
Z0VuYWJsZWQgPT0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID0gbGF5ZXJGbHVzaGluZ0VuYWJsZWQ7Ci0K
LSAgICBpZiAobV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQpIHsKLSAgICAgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYW5jZWxQZW5k
aW5nTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVs
ZUxheWVyRmx1c2goKQotewotICAgIGlmICghbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCi17Ci0gICAg
bV9sYXllckZsdXNoVGltZXIuc3RvcCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
OjpzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wgbm90aWZ5
QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKQotewotICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRM
YXllckZsdXNoID0gbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXItPnNldENvbnRlbnRzT3BhcXVlKG1fd2ViUGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCkgJiYgIW1f
d2ViUGFnZS0+ZHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoKSk7Ci0KLSAgICAvLyBBZGQgdGhl
IGFjY2VsZXJhdGVkIGxheWVyIHRyZWUgaGllcmFyY2h5LgotICAgIGlmIChncmFwaGljc0xheWVy
KQotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmFkZENoaWxkKGdyYXBoaWNz
TGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjppbnZhbGlkYXRlKCkKLXsK
LSAgICBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwotCi0gICAgQVNTRVJUKG1faXNWYWxpZCk7
Ci0gICAgbV9yb290TGF5ZXIgPSBudWxscHRyOwotICAgIG1faXNWYWxpZCA9IGZhbHNlOwotfQot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVk
RGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIG1fbm9uQ29tcG9z
aXRlZENvbnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIGlmICht
X3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOwotCi0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiAv
KiBzY3JvbGxPZmZzZXQgKi8pCi17Ci0gICAgc2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERp
c3BsYXkoc2Nyb2xsUmVjdCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmZvcmNl
UmVwYWludCgpCi17Ci0gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0
IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBhIFVJUHJv
Y2VzcyB0byByZXBseSBuaWNlbHkuCi0gICAgLy8gSW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2Vy
aW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQg
YW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4KLSAgICBzeW5jRGlzcGxheVN0YXRl
KCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lz
ZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgot
ICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLSAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKLX0KLQotYm9v
bCBMYXllclRyZWVDb29yZGluYXRvcjo6Zm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJh
Y2tJRCkKLXsKLSAgICAvLyBXZSBleHBlY3QgdGhlIFVJIHByb2Nlc3MgdG8gbm90IHJlcXVpcmUg
YSBuZXcgcmVwYWludCB1bnRpbCB0aGUgcHJldmlvdXMgb25lIGhhcyBmaW5pc2hlZC4KLSAgICBB
U1NFUlQoIW1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKTsKLSAgICBtX2ZvcmNlUmVwYWlu
dEFzeW5jQ2FsbGJhY2tJRCA9IGNhbGxiYWNrSUQ7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNpemVE
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
ZXMoKQotewotICAgIGlmIChtX3dhaXRpbmdGb3JVSVByb2Nlc3MpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllcklmTmVlZGVkKCk7Ci0K
LSAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOwotICAgIGlmIChtX3BhZ2VPdmVybGF5TGF5ZXIpCi0gICAgICAg
IG1fcGFnZU92ZXJsYXlMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpOwotCi0gICAgYm9vbCBkaWRTeW5jID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJh
bWUoKS0+dmlldygpLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
LQotICAgIGZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9kZXRhY2hlZExheWVycy5zaXplKCk7ICsraSkKLSAgICAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEZWxldGVD
b21wb3NpdGluZ0xheWVyKG1fZGV0YWNoZWRMYXllcnNbaV0pKTsKLSAgICBtX2RldGFjaGVkTGF5
ZXJzLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9zaG91bGRTeW5jRnJhbWUpIHsKLSAgICAgICAgZGlk
U3luYyA9IHRydWU7Ci0KLSAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSByb3VuZGVkSW50
U2l6ZShtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNpemUoKSk7Ci0gICAgICAgIEludFJl
Y3QgY292ZXJlZFJlY3QgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0
ZWRDb250ZW50TGF5ZXIuZ2V0KCkpLT5jb3ZlclJlY3QoKTsKLSAgICAgICAgbV93ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpEaWRSZW5kZXJGcmFtZShj
b250ZW50c1NpemUsIGNvdmVyZWRSZWN0KSk7Ci0gICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2Vz
cyA9IHRydWU7Ci0gICAgICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIGlmIChtX2ZvcmNlUmVwYWludEFz
eW5jQ2FsbGJhY2tJRCkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSk7Ci0g
ICAgICAgIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEID0gMDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZGlkU3luYzsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6aW5pdGlhbGl6
ZVJvb3RDb21wb3NpdGluZ0xheWVySWZOZWVkZWQoKQotewotICAgIGlmIChtX2RpZEluaXRpYWxp
emVSb290Q29tcG9zaXRpbmdMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpTZXRSb290Q29tcG9z
aXRpbmdMYXllcih0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PmlkKCkpKTsKLSAgICBtX2RpZEluaXRpYWxpemVSb290Q29tcG9zaXRpbmdMYXllciA9IHRydWU7
Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpzeW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3Np
dGlvblVwZGF0ZSkgewotICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNvbnRl
bnRzUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgICAgIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9u
VXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
U2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKGlkLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQotewotICAgIG1fc2hvdWxk
U3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihpZCwgY2hpbGRy
ZW4pKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXll
ciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gdG9rZW4gPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5n
cmFwaGljc1N1cmZhY2VUb2tlbigpOwotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNhbnZhc1Bs
YXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCk7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVDYW52YXMoaWQsIGNhbnZh
c1NpemUsIHRva2VuKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQbGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxh
eWVyKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICB1aW50MzJfdCBmcm9u
dEJ1ZmZlciA9IGNhbnZhc1BsYXRmb3JtTGF5ZXItPmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
U3luY0NhbnZhcyhpZCwgZnJvbnRCdWZmZXIpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgaWYgKG1f
aXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpEZXN0cm95Q2FudmFzKGlkKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNMYXllckZpbHRlcnMoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAg
IG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAg
Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhmaWx0ZXJzKTsKLSNlbmRpZgotICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnMoaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5B
QkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y2hlY2tDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewot
ICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIHRoZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkg
b2JqZWN0cyBiZWZvcmUgd2UgZ2V0IHRvIHNlcmlhbGl6ZSB0aGUKLSAgICAvLyBjdXN0b20gZmls
dGVycyB0byB0aGUgb3RoZXIgcHJvY2Vzcy4gVGhhdCdzIGJlY2F1c2UgV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5IG5lZWRzCi0gICAgLy8gdG8gbGluayBiYWNrIHRvIHRoZSBjb29yZGluYXRv
ciwgc28gdGhhdCB3ZSBjYW4gc2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3Mgd2hlbiAK
LSAgICAvLyB0aGUgcHJvZ3JhbSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCi0gICAgLy8gTm90ZSB0
aGF0IHRoZSBzZXJpYWxpemF0aW9uIHdpbGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGlu
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KLSAgICAv
LyBBdCB0aGF0IHBvaW50IHRoZSBwcm9ncmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2Uu
IEFsbCB0aGUgb3RoZXIgdGltZXMgaXQgd2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dy
YW0uCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsK
LSAgICAgICAgaWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJh
dGlvbjo6VkFMSURBVEVEX0NVU1RPTSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBj
b25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PGNvbnN0IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlv
bik7Ci0gICAgICAgIEFTU0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+
aXNJbml0aWFsaXplZCgpKTsKLSAgICAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQ
cm9ncmFtKiBwcm9ncmFtID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBs
YXRmb3JtQ29tcGlsZWRQcm9ncmFtKCk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8V2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5PiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk7Ci0gICAgICAg
IGlmIChwcm9ncmFtLT5jbGllbnQoKSkKLSAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+KHByb2dyYW0t
PmNsaWVudCgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9n
cmFtUHJveHkgPSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHk6OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcHJvZ3JhbS0+c2V0Q2xpZW50KGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5j
bGllbnQoKSkgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5zZXRDbGll
bnQodGhpcyk7Ci0gICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVy
UHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+
dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRpc2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0
b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBpdC4KLSAgICAgICAgICAgIEFTU0VSVChjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpID09IHRoaXMpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFt
UHJveHkoV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KiBjdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHkpCi17Ci0gICAgLy8gQXQgdGhpcyB0aW1lIHRoZSBzaGFkZXIgaXMgbm90IG5lZWRlZCBhbnlt
b3JlLCBzbyB3ZSByZW1vdmUgaXQgZnJvbSBvdXIgc2V0IGFuZCAKLSAgICAvLyBzZW5kIGEgbWVz
c2FnZSB0byB0aGUgb3RoZXIgcHJvY2VzcyB0byBkZWxldGUgaXQuCi0gICAgbV9jdXN0b21GaWx0
ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KTsKLSAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpc2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygp
Ci17Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgV2ViQ29yZSB3aWxsIG5vdCBjYWxsIGludG8gdGhp
cyBjb29yZGluYXRvciBhbnltb3JlLgotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVByb3h5Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmJlZ2luKCk7
Ci0gICAgZm9yICg7IGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5lbmQoKTsgKytpdGVy
KQotICAgICAgICAoKml0ZXIpLT5zZXRDbGllbnQoMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKLSAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9kZXRhY2hlZExheWVycy5hcHBlbmQobGF5ZXIt
PmlkKCkpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRh
dGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKLXsK
LSAgICAvLyBUaGVzZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCi0gICAg
UmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKLSAg
ICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5w
b3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
cmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NM
YXllcigpKTsKLSAgICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxh
eWVyKiByZW5kZXJMYXllcikKLXsKLSAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxm
KHJlbmRlckxheWVyKTsKLQotICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQotICAg
ICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RD
aGlsZCgpKTsKLSAgICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIHVw
ZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0ZpeGVkTGF5ZXJzKCkKLXsK
LSAgICBpZiAoIW1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKSB8fCAhbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQ
b3NpdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3dlYlBhZ2Ut
Pm1haW5GcmFtZSgpLT52aWV3KCktPmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckxheWVyKiByb290UmVuZGVyTGF5ZXIgPSBtX3dl
YlBhZ2UtPm1haW5GcmFtZSgpLT5jb250ZW50UmVuZGVyZXIoKS0+Y29tcG9zaXRvcigpLT5yb290
UmVuZGVyTGF5ZXIoKTsKLSAgICBBU1NFUlQocm9vdFJlbmRlckxheWVyKTsKLSAgICBpZiAocm9v
dFJlbmRlckxheWVyLT5maXJzdENoaWxkKCkpCi0gICAgICAgIHVwZGF0ZU9mZnNldEZyb21WaWV3
cG9ydEZvckxheWVyKHJvb3RSZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6bG9ja0FuaW1hdGlvbnMoKQotewotICAgIG1fYW5pbWF0aW9u
c0xvY2tlZCA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKHRydWUpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6dW5sb2NrQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX2Fu
aW1hdGlvbnNMb2NrZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uc0xvY2tl
ZCA9IGZhbHNlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSkpOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYg
KG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxlIHBlcmZvcm1pbmcgbGF5b3V0
LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9ucyBjb250aW51aW5nIGluIHRo
ZSBVSSBwcm9jZXNzIHdoaWxlCi0gICAgLy8gdGhlIHdlYiBwcm9jZXNzIGxheW91dCB3YW50cyB0
byBjYW5jZWwgdGhlbS4KLSAgICBsb2NrQW5pbWF0aW9ucygpOwotICAgIHN5bmNEaXNwbGF5U3Rh
dGUoKTsKLQotICAgIC8vIFdlIGNhbiB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgYmVmb3JlIGZsdXNo
aW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNoYW5nZXMsIGZvciBleGFtcGxlIGlmIHRoZXJl
IGFyZSBjb250ZW50IHVwZGF0ZXMKLSAgICAvLyBpbiBhIGxheWVyIHdpdGggb3BhY2l0eSAwLgot
ICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2ggPSAhbV9pc1ZhbGlkIHx8ICF0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmhhc1BlbmRpbmdWaXNpYmxlQ2hh
bmdlcygpOwotICAgIGlmIChjYW5VbmxvY2tCZWZvcmVGbHVzaCkKLSAgICAgICAgdW5sb2NrQW5p
bWF0aW9ucygpOwotCi0gICAgaWYgKCFtX2lzVmFsaWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKLSAgICAgICAgZGlkUGVyZm9ybVNjaGVk
dWxlZExheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c3luY0Rp
c3BsYXlTdGF0ZSgpCi17Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAh
VVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgcHJl
dmlvdXNseSByZWdpc3RlcmVkIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIGJlaW5nIGV4ZWN1dGVk
IGJlZm9yZSB3ZSBmbHVzaCB0aGUgbGF5ZXJzLgotICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vj
b25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKLSNlbmRpZgotCi0gICAgbV93ZWJQ
YWdlLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpk
aWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpCi17Ci0gICAgaWYgKG1fbm90aWZ5QWZ0ZXJT
Y2hlZHVsZWRMYXllckZsdXNoKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PERyYXdpbmdBcmVhSW1w
bCo+KG1fd2ViUGFnZS0+ZHJhd2luZ0FyZWEoKSktPmxheWVySG9zdERpZEZsdXNoTGF5ZXJzKCk7
Ci0gICAgICAgIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoID0gZmFsc2U7Ci0gICAg
fQotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllckZsdXNoVGltZXJGaXJlZChU
aW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIHBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZVBhZ2VPdmVy
bGF5TGF5ZXIoKQotewotICAgIEFTU0VSVCghbV9wYWdlT3ZlcmxheUxheWVyKTsKLQotICAgIG1f
cGFnZU92ZXJsYXlMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXROYW1lKCJMYXllclRyZWVD
b29yZGluYXRvciBwYWdlIG92ZXJsYXkgY29udGVudCIpOwotI2VuZGlmCi0KLSAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5
ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKG1fcGFnZU92ZXJsYXlMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRp
bmF0b3I6OmRlc3Ryb3lQYWdlT3ZlcmxheUxheWVyKCkKLXsKLSAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKLSAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
LSAgICBtX3BhZ2VPdmVybGF5TGF5ZXIgPSBudWxscHRyOwotfQotCi1QYXNzUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlSW1hZ2VCYWNr
aW5nSWZOZWVkZWQoSW1hZ2UqIGltYWdlKQotewotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKGltYWdlKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9p
bWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBpbWFnZUJhY2tpbmc7Ci0gICAgaWYgKGl0ID09IG1faW1hZ2VCYWNraW5ncy5lbmQo
KSkgewotICAgICAgICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3Jl
YXRlKHRoaXMsIGltYWdlKTsKLSAgICAgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBp
bWFnZUJhY2tpbmcpOwotICAgIH0gZWxzZQotICAgICAgICBpbWFnZUJhY2tpbmcgPSBpdC0+dmFs
dWU7Ci0KLSAgICByZXR1cm4gaW1hZ2VCYWNraW5nOwotfQotCi12b2lkIExheWVyVHJlZUNvb3Jk
aW5hdG9yOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OkNyZWF0ZUltYWdlQmFja2lu
ZyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnVwZGF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3Jk
aW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRy
dWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpDbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX2ltYWdlQmFja2luZ3MucmVtb3ZlKGltYWdl
SUQpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eTo6UmVtb3ZlSW1hZ2VCYWNraW5nKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nSW1hZ2VCYWNraW5nQ2hhbmdlcygpCi17Ci0gICAgSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBlbmQgPSBtX2ltYWdlQmFja2luZ3MuZW5kKCk7Ci0gICAg
Zm9yIChJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2ltYWdlQmFja2luZ3MuYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+dmFsdWUtPnVwZGF0ZSgp
OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpub3RpZnlBbmltYXRpb25TdGFydGVk
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgLyogdGltZSAqLykKLXsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikKLXsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
cjo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0KQotewotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRM
YXllcikgewotICAgICAgICBtX3dlYlBhZ2UtPmRyYXdSZWN0KGdyYXBoaWNzQ29udGV4dCwgY2xp
cFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbV9wYWdlT3ZlcmxheUxheWVyKSB7Ci0gICAgICAgIC8vIE92ZXJsYXlzIGNvbnRhaW4gdHJh
bnNwYXJlbnQgY29udGVudHMgYW5kIHdvbid0IGNsZWFyIHRoZSBjb250ZXh0IGFzIHBhcnQgb2Yg
dGhlaXIgcmVuZGVyaW5nLCBzbyB3ZSBkbyBpdCBoZXJlLgotICAgICAgICBncmFwaGljc0NvbnRl
eHQuY2xlYXJSZWN0KGNsaXBSZWN0KTsKLSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UGFnZU92ZXJs
YXkoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19
Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0
ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotewotICAgIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIgPSBuZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KGNsaWVudCk7Ci0gICAgbGF5ZXItPnNldENvb3JkaW5hdG9yKHRoaXMpOwotICAgIG1fcmVnaXN0
ZXJlZExheWVycy5hZGQobGF5ZXIpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29u
dGVudHNTY2FsZSk7Ci0gICAgbGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKGxheWVyKTsKLX0KLQotYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBk
YXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVUaWxlKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5
ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwotfQotCi12b2lkIExheWVyVHJl
ZUNvb3JkaW5hdG9yOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxheWVySUQs
IHRpbGVJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVVcGRhdGVB
dGxhcyhpbnQgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhh
bmRsZSkKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSkpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJRCkKLXsK
LSAgICBpZiAobV9pc1B1cmdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVVwZGF0ZUF0bGFz
KGF0bGFzSUQpKTsKLX0KLQotV2ViQ29yZTo6RmxvYXRSZWN0IExheWVyVHJlZUNvb3JkaW5hdG9y
Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aXNpYmxlQ29u
dGVudHNSZWN0OwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldExheWVyQW5p
bWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmIGFuaW1hdGlvbnMpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIGFjdGl2ZUFuaW1hdGlvbnMgPSBhbmltYXRpb25z
LmdldEFjdGl2ZUFuaW1hdGlvbnMoKTsKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhY3RpdmVBbmltYXRpb25zLmFuaW1hdGlvbnMoKS5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzID0gYW5p
bWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7Ci0gICAgICAgIGlmIChrZXlm
cmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5ZnJhbWVz
LnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSog
ZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1ZSo+KGtl
eWZyYW1lcy5hdChpKSk7Ci0gICAgICAgICAgICBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Qcm94
aWVzKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNl
dExheWVyQW5pbWF0aW9ucyhsYXllcklELCBhY3RpdmVBbmltYXRpb25zKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKLXsKLSAgICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxl
Q29udGVudHNSZWN0OwotICAgIGJvb2wgY29udGVudHNTY2FsZURpZENoYW5nZSA9IHNjYWxlICE9
IG1fY29udGVudHNTY2FsZTsKLQotICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGlj
YXRlcyB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCi0g
ICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVy
LmdldCgpKS0+c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5
VmVjdG9yKTsKLQotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2Fs
ZURpZENoYW5nZSkgewotICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAg
ICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLQotICAgICAgICBIYXNoU2V0PFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRM
YXllcnMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoY29udGVudHNTY2FsZURpZENoYW5n
ZSkKLSAgICAgICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7Ci0gICAg
ICAgICAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICAgICAgICAgICgqaXQp
LT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2NoZWR1bGVM
YXllckZsdXNoKCk7Ci0gICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAg
ICAgICAvLyBSb3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1
cmUgdGhhdCBpdHMgc2l6ZSBzdGF5cwotICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5n
LiBUaGlzIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgotICAgICAgICBtX3dlYlBh
Z2UtPnNldEZpeGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKLSAg
ICB9Ci0KLSAgICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQotICAgICAgICBtX3Nob3VsZFNl
bmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9IHRydWU7Ci19Ci0KLUdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBMYXllclRyZWVDb29yZGluYXRvcjo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKQotewotICAgIHJl
dHVybiB0aGlzOwotfQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVBbmltYXRpb24oKQotewotICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjphbmltYXRp
b25GcmFtZVJlYWR5KCkKLXsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLSNlbmRpZgot
Ci12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAgIG1f
d2FpdGluZ0ZvclVJUHJvY2VzcyA9IGZhbHNlOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fdXBkYXRlQXRsYXNlc1tpXS0+ZGlkU3dhcEJ1ZmZlcnMoKTsKLX0KLQotYm9v
bCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2FpdGluZ0ZvclVJUHJvY2Vz
czsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkK
LXsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gcHVyZ2luZ1RvZ2dsZShtX2lzUHVyZ2luZywg
dHJ1ZSk7Ci0KLSAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+
OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNo
U2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1f
cmVnaXN0ZXJlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQp
LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwot
ICAgIG1fdXBkYXRlQXRsYXNlcy5jbGVhcigpOwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRT
aXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzLCBpbnQmIGF0bGFzSUQs
IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhp
Y3NDb250ZXh0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3VwZGF0ZUF0bGFzZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVXBkYXRlQXRsYXMqIGF0bGFzID0gbV91cGRhdGVBdGxh
c2VzW2ldLmdldCgpOwotICAgICAgICBpZiAoYXRsYXMtPnN1cHBvcnRzQWxwaGEoKSA9PSAoZmxh
Z3MgJiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEpKSB7Ci0gICAgICAgICAgICAv
LyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlciBz
cGFjZS4KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dCA9IGF0bGFzLT5iZWdpblBhaW50aW5n
T25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKLSAgICAgICAgICAgIGlm
IChncmFwaGljc0NvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50IFNj
cmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0d28u
Ci0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhp
cywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7Ci0gICAgc2NoZWR1bGVSZWxlYXNl
SW5hY3RpdmVBdGxhc2VzKCk7Ci0gICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5sYXN0KCktPmJl
Z2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZzZXQpOwotfQot
Ci1jb25zdCBkb3VibGUgUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwgPSAwLjU7
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRs
YXNlcygpCi17Ci0gICAgaWYgKCFtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lci5zdGFydFJlcGVhdGlu
ZyhSZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPExh
eWVyVHJlZUNvb3JkaW5hdG9yPiopCi17Ci0gICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8ga2VlcCBv
bmUgYXRsYXMgZm9yIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFVwZGF0ZUF0
bGFzPiBhdGxhc1RvS2VlcEFueXdheTsKLSAgICBib29sIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25D
b21wb3NpdGVkQ29udGVudCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSBtX3VwZGF0ZUF0bGFz
ZXMuc2l6ZSgpIC0gMTsgIGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxh
cyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFhdGxhcy0+aXNJblVz
ZSgpKQotICAgICAgICAgICAgYXRsYXMtPmFkZFRpbWVJbmFjdGl2ZShSZWxlYXNlSW5hY3RpdmVB
dGxhc2VzVGltZXJJbnRlcnZhbCk7Ci0gICAgICAgIGJvb2wgdXNhYmxlRm9yTm9uQ29tcG9zaXRl
ZENvbnRlbnQgPSAhYXRsYXMtPnN1cHBvcnRzQWxwaGEoKTsKLSAgICAgICAgaWYgKGF0bGFzLT5p
c0luYWN0aXZlKCkpIHsKLSAgICAgICAgICAgIGlmICghZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNv
bXBvc2l0ZWRDb250ZW50ICYmICFhdGxhc1RvS2VlcEFueXdheSAmJiB1c2FibGVGb3JOb25Db21w
b3NpdGVkQ29udGVudCkKLSAgICAgICAgICAgICAgICBhdGxhc1RvS2VlcEFueXdheSA9IG1fdXBk
YXRlQXRsYXNlc1tpXS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBtX3VwZGF0ZUF0bGFzZXMucmVt
b3ZlKGkpOwotICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50
KQotICAgICAgICAgICAgZm91bmRBY3RpdmVBdGxhc0Zvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVk
Q29udGVudCAmJiBhdGxhc1RvS2VlcEFueXdheSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzLmFw
cGVuZChhdGxhc1RvS2VlcEFueXdheS5yZWxlYXNlKCkpOwotCi0gICAgaWYgKG1fdXBkYXRlQXRs
YXNlcy5zaXplKCkgPD0gMSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIu
c3RvcCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNv
bG9yKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVD
b29yZGluYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDU3OGU1NWMzYjNj
N2E0MGE2MGIxZGI2MzdhMmFmZDQxMzc0YmJkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyMTAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVDb29y
ZGluYXRvcl9oCi0jZGVmaW5lIExheWVyVHJlZUNvb3JkaW5hdG9yX2gKLQotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5o
IgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlQ29udGV4dC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJUaW1l
ci5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0jaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyQ2xpZW50Lmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyRmFjdG9yeS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtUHJveHkuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
VXBkYXRlSW5mbzsKLWNsYXNzIFdlYlBhZ2U7Ci0KLWNsYXNzIExheWVyVHJlZUNvb3JkaW5hdG9y
IDogcHVibGljIExheWVyVHJlZUhvc3QsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQKLSAg
ICAsIHB1YmxpYyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQKLSAgICAsIHB1YmxpYyBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAgICAsIHB1YmxpYyBVcGRhdGVB
dGxhc0NsaWVudAotICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5Ci0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICwgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
Q2xpZW50Ci0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclRy
ZWVDb29yZGluYXRvcj4gY3JlYXRlKFdlYlBhZ2UqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVD
b29yZGluYXRvcigpOwotCi0gICAgdmlydHVhbCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXll
clRyZWVDb250ZXh0KCkgeyByZXR1cm4gbV9sYXllclRyZWVDb250ZXh0OyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldExheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZChib29sKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVMYXllckZsdXNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZE5v
dGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHNldE5vbkNvbXBv
c2l0ZWRDb250ZW50c05lZWREaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7
Ci0gICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOwotICAgIHZpcnR1YWwgYm9vbCBmb3Jj
ZVJlcGFpbnRBc3luYyh1aW50NjRfdCBjYWxsYmFja0lEKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2l6
ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKTsKLQotICAgIHZpcnR1
YWwgdm9pZCBkaWRJbnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkVW5p
bnN0YWxsUGFnZU92ZXJsYXkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlOZWVk
c0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQ
YWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQpOwotICAgIHZpcnR1YWwgYm9vbCBwYWdlT3ZlcmxheVNo
b3VsZEFwcGx5RmFkZVdoZW5QYWludGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZh
bHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VTY2Fs
ZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1hZ2Uq
KSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVu
ZGVyTmV4dEZyYW1lKCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwot
ICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NM
YXllckZhY3RvcnkoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0
ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxh
dGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7Ci0j
ZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpOwotCi0g
ICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZs
YWdzLCBpbnQmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLSAgICAvLyBVcGRhdGVB
dGxhc0NsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhpbnQgYXRsYXNJ
RCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXMoaW50IGF0bGFzSUQpOwotCi0jaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQotICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIE9W
RVJSSURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYpIE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3IoV2ViUGFnZSopOwotCi1wcml2YXRlOgotICAgIC8vIEdyYXBo
aWNzTGF5ZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOwotICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKLQotICAgIC8v
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGZsdXNoUGVu
ZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKTsKLQotICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOwotCi0g
ICAgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3IKLSAgICB2b2lkIGluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7
Ci0gICAgdm9pZCBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIGJvb2wgZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpOwot
ICAgIHZvaWQgcGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKLSAgICB2b2lkIGRpZFBlcmZv
cm1TY2hlZHVsZWRMYXllckZsdXNoKCk7Ci0gICAgdm9pZCBzeW5jRGlzcGxheVN0YXRlKCk7Ci0g
ICAgdm9pZCBsb2NrQW5pbWF0aW9ucygpOwotICAgIHZvaWQgdW5sb2NrQW5pbWF0aW9ucygpOwot
Ci0gICAgdm9pZCBsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVD
b29yZGluYXRvcj4qKTsKLQotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2Vz
KCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZvaWQgYW5pbWF0
aW9uRnJhbWVSZWFkeSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIHJlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiopOwotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94
eUNsaWVudAotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eSopOwotCi0gICAgdm9pZCBjaGVja0N1c3RvbUZpbHRlclByb2dy
YW1Qcm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKLSAgICB2b2lkIGRp
c2Nvbm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOwotI2VuZGlmCi0KLSAgICBPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0KLSAgICAvLyBUaGUgbGF5ZXIgd2hp
Y2ggY29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCi0gICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKLQotICAgIC8v
IFRoZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ug
b3ZlcmxheS4KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3Zlcmxh
eUxheWVyOwotCi0gICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
PiBtX3JlZ2lzdGVyZWRMYXllcnM7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9k
ZXRhY2hlZExheWVyczsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsK
LSAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOwotICAgIFZlY3RvcjxPd25QdHI8
VXBkYXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4gbV9jdXN0b21GaWx0
ZXJQcm9ncmFtczsKLSNlbmRpZgotCi0gICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5
ZXJGbHVzaDsKLSAgICBib29sIG1faXNWYWxpZDsKLSAgICAvLyBXZSBkb24ndCBzZW5kIHRoZSBt
ZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gVUkgUHJvY2VzcyBkdXJp
bmcgcHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJl
c291cmNlcy4KLSAgICBib29sIG1faXNQdXJnaW5nOwotCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JV
SVByb2Nlc3M7Ci0gICAgYm9vbCBtX2lzU3VzcGVuZGVkOwotICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotICAg
IGJvb2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7Ci0KLSAgICBMYXllclRyZWVD
b250ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKLSAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOwot
ICAgIGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7Ci0gICAgV2ViQ29y
ZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IG1fbGF5ZXJGbHVzaFRpbWVyOwotICAgIFdl
YkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBtX3JlbGVhc2VJbmFjdGl2ZUF0bGFz
ZXNUaW1lcjsKLSAgICBib29sIG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkOwotICAgIHVp
bnQ2NF90IG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEOwotICAgIGJvb2wgbV9hbmltYXRp
b25zTG9ja2VkOwotfTsKLQotfQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIExheWVyVHJlZUNvb3Jk
aW5hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlQ29vcmRpbmF0b3IubWVzc2FnZXMuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE2MzZlNzAwOWVmMTIxZDhhNGNmYTFhNjU0YWNkMjlkYTgzMjc1OTAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3IubWVzc2Fn
ZXMuaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jCi0jICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSMg
ICAgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0j
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotIyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotIyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0jICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0jCi0KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW1l
c3NhZ2VzIC0+IExheWVyVHJlZUNvb3JkaW5hdG9yIHsKLSAgICBTZXRWaXNpYmxlQ29udGVudHNS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSwg
V2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9yeSkKLSAgICBSZW5kZXJOZXh0RnJh
bWUoKQotICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQotICAgIEFuaW1hdGlvbkZyYW1lUmVhZHkoKQotI2VuZGlmCi19Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5k
ZXggMzI3ZjY1MWM5M2Y2MmVjYWM0ZTNlMTA1NGIwN2UzMjMwMTFmYmJlYy4uYWU1YjJjOGI2OTg4
ZGM4ZDZlMmExMmY1Y2NmNmMzMTIzOTM4ZDc0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJikgPSAwOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCmlu
ZGV4IDVlNzBjOTQ0ODEzNDUwNDNjNDk3Y2YyYTRkZmU5OGMxZTMyMjljNzQuLjg2YzUzYjE4MTA3
NjIxNDM1MThiZDI5NjNlY2NjY2YxZTI3YTY1MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCkBAIC03MjksMTAgKzcy
OSwxMCBAQCB2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlzcGxheShVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvKQogfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBEcmF3aW5nQXJl
YUltcGw6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCit2b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlkUmVj
ZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2Fn
ZURlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKGNv
bm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgbWVz
c2FnZUlELCBkZWNvZGVyKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKaW5kZXggNmQ0OTcxOWY3YTk4Y2Vm
MjVkNDkzNWZmYTcwNmNhNGNkMmNmZDNiMC4uYTMxMzMxNmM5YWQ5OWQ5OGY2NmM3MmJiZWZmOTQ1
YjEwYTkxZWRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYUltcGwuaApAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAK
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVMYXllclRyZWVDb29yZGluYXRvck1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJ
UEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsK
ICNlbmRpZgogCiAgICAgLy8gQ29yZUlQQyBtZXNzYWdlIGhhbmRsZXJzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdk
NTkwYTFhN2FlNjA4MDgzZmE4ZjZkMzdlMjZjMTY5ZGY0OWVkNGYuLjNlMzA0MmRhNjI2ZGUyMWEw
MzU4MTdhYTEwMDBmMWFiNmVjZTY3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNlbmRp
ZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVyVHJlZUNv
b3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgiCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQpAQCAtNTMs
NyArNTMsNyBAQCBQYXNzUmVmUHRyPExheWVyVHJlZUhvc3Q+IExheWVyVHJlZUhvc3Q6OmNyZWF0
ZShXZWJQYWdlKiB3ZWJQYWdlKQogI2VsaWYgUExBVEZPUk0oV0lOKSAmJiBIQVZFKFdLUUNBKQog
ICAgIHJldHVybiBMYXllclRyZWVIb3N0Q0FXaW46OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbGlmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICByZXR1cm4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmNyZWF0ZSh3ZWJQYWdlKTsKKyAgICByZXR1cm4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGUod2ViUGFnZSk7CiAjZWxpZiBQTEFURk9STShHVEspICYmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdEd0azo6Y3JlYXRlKHdlYlBhZ2UpOwogI2Vs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9z
dC5oCmluZGV4IGQ0ZDVlZGM4Y2MyZjRmODY5MjhmMmU1YzJkZDJkYzA5Zjc3YWNmOGIuLmVkODkx
MDU0ZDMyMzkyODg4NmJmZjYzNjFiNjg1MmMxMTgxNDdjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaApAQCAtOTYsNyArOTYsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgLyogc2NhbGUgKi8sIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpID0gMDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDEwMmZmNWViNDdh
ZTU3Nzg1ZmZkZTg3Zjc0ODkzMjk5MDlkOGYzYmYuLjgwNmY5MDMwMDE1NmU3ZWUxODVmNzgzNWRl
MDA1NGY4OGMwYWUwY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTE4Myw3ICsxODMsNyBAQAogI2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCiAjZW5kaWYK
IAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKQEAgLTM3Niw3ICszNzYsNyBAQCBXZWJQYWdlOjpXZWJQ
YWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFy
YW1ldGVycykKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgb2JqZWN0
IGNvbnN0cnVjdG9ycywgYW5kIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgc2hvdWxkIGJlIG1lc3Nh
Z2UgcmVjZWl2ZXJzLgogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQs
IHRoaXMpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCB0aGlzKTsKKyAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgdGhpcyk7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZUlELCB0aGlzKTsKQEAgLTQwNyw3ICs0MDcsNyBAQCBXZWJQYWdlOjp+V2ViUGFnZSgp
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIG9iamVjdCBkZXN0cnVj
dG9ycywgYW5kIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMgc2hvdWxkIGJlIG1lc3NhZ2UgcmVjZWl2
ZXJzLgogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5TUEVD
VE9SKQogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKQEAg
LTI5MTIsOSArMjkxMiw5IEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnCiAgICAgfQogCiAjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICBpZiAobWVzc2FnZUlELmlzPENvcmVJUEM6Ok1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3Jk
aW5hdG9yPigpKSB7CisgICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3ND
b29yZGluYXRlZExheWVyVHJlZUhvc3Q+KCkpIHsKICAgICAgICAgaWYgKG1fZHJhd2luZ0FyZWEp
Ci0gICAgICAgICAgICBtX2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0
b3JNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CisgICAgICAgICAgICBt
X2RyYXdpbmdBcmVhLT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShj
b25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
I2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178861</attachid>
            <date>2012-12-11 13:25:03 -0800</date>
            <delta_ts>2012-12-11 16:28:15 -0800</delta_ts>
            <desc>Rebase after r137293</desc>
            <filename>bug-104641-20121212062226.patch</filename>
            <type>text/plain</type>
            <size>171086</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTcxZDQ3MzE1YjI3ZmJm
OGI0MTFlNmY0YmRmZTc5MjdkMGMyZDQxOC4uNjIzMjg0YmExNGZhNWZlMzhjYzQyY2ZhNmJiNTZk
OWEyZjNjNDM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMiBAQAorMjAxMi0xMi0xMSAgR3dh
bmcgWW9vbiBId2FuZyAgPHJ5dW1pZWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRp
bmF0ZWQgR3JhcGhpY3M6IFJlbmFtZSBMYXllclRyZWVDb29yZGluYXRvciB0byBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNDY0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSBuYW1lIG9mIExheWVyVHJlZUNvb3JkaW5hdG9yIGRvZXMgbm90IG1hdGNoIExh
eWVyVHJlZUhvc3QuICBUaGlzCisgICAgICAgIHBhdGNoIHJlbmFtZXMgaXQgdG8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LiBBbmQgbWFrZSBhIGdldHRlciBmb3IKKyAgICAgICAgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkgaW4gUVF1aWNrV2ViUGFnZVByaXZhdGUgdG8gbWFrZSBhIGNs
ZWFuZXIgY29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IGEgcmVmYWN0b3Jpbmcu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5w
cmk6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaDoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKEV3a1ZpZXdJbXBsOjpsYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQ
cml2YXRlOjpwYWludCk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6Y29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFp
bnROb2RlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFSYXdXZWJWaWV3Ojpz
ZXRTaXplKToKKyAgICAgICAgKFFSYXdXZWJWaWV3OjpsYXllclRyZWVSZW5kZXJlcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZp
ZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRpc3BhdGNoVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVw
ZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmls
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpy
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2luZyk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250
ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6c2V0TGF5ZXJBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
cmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmFuaW1hdGlvbkZyYW1lUmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2Fu
dmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5
bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eS5tZXNzYWdlcy5pbjogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkubWVzc2FnZXMu
aW4uCisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVl
UmVuZGVyZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6YW5pbWF0aW9u
RnJhbWVSZWFkeSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVW
aWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0
RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5n
U3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVSZW5kZXJlcik6CisgICAg
ICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpE
cmF3aW5nQXJlYVByb3h5OjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eTo6Y29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKToKKyAgICAgICAg
KFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlkUmVjZWl2
ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHlJbXBsOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaDoKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExl
Z2FjeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50TGVnYWN5SW1wbDo6ZGlk
Q2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUxheWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNhbmNlbFBlbmRpbmdMYXllckZsdXNoKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRTaG91bGROb3RpZnlB
ZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVl
ZERpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
cm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpmb3JjZVJlcGFpbnRBc3luYyk6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2l6ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6
OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRVbmluc3RhbGxQYWdlT3Zl
cmxheSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0UGFn
ZU92ZXJsYXlOZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnNldFBhZ2VPdmVybGF5T3BhY2l0eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojppbml0aWFsaXplUm9vdENvbXBvc2l0
aW5nTGF5ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3hp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXRhY2hMYXllcik6CisgICAgICAgIChX
ZWJLaXQ6OnVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvclNlbGYpOgorICAgICAgICAoV2ViS2l0
Ojp1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c3luY0ZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dW5sb2NrQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGVyZm9ybVNjaGVkdWxlZExh
eWVyRmx1c2gpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5
bmNEaXNwbGF5U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVBhZ2VP
dmVybGF5TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1h
Z2VCYWNraW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpm
bHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpub3RpZnlGbHVzaFJlcXVpcmVkKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Z3JhcGhpY3NM
YXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnNjaGVkdWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0OjphbmltYXRpb25GcmFtZVJlYWR5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjpyZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OmxheWVyVHJlZVRpbGVVcGRhdGVzQWxsb3dlZCk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cHVyZ2VCYWNraW5nU3RvcmVz
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpiZWdpbkNvbnRl
bnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6cmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyRmlyZWQpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xv
cik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5o
LgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlQ29u
dGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cGFnZU92
ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnBhdXNlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpyZXN1bWVSZW5kZXJpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmRldmljZVNjYWxlRmFjdG9yRGlkQ2hhbmdl
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QubWVzc2FnZXMuaW46IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29y
ZGluYXRvci5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaDoKKyAgICAgICAgKERyYXdpbmdBcmVhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFJ
bXBsOjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oOgorICAgICAgICAoRHJhd2lu
Z0FyZWFJbXBsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKExheWVyVHJlZUhv
c3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6On5X
ZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgor
CiAyMDEyLTEyLTExICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBJbml0
aWFsaXplIG5ldyB3ZWIgcHJvY2Vzc2VzIHdpdGggbGlzdCBvZiBhdXRvLXN0YXJ0IG9yaWdpbnMg
Zm9yIHBsdWctaW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDhkZTMxOTEwMmUyNWM0ZDQ1ODJk
NjI4NDNlMmUxMGU2ZDg2OGYzMjYuLjI0M2Q5MGM1ZWYyNDU3ZWRkYjU0NzU0ZTVjYTljOTM4NTA3
NWU5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0zNDgsNyArMzQ4LDcgQEAgc2V0KFdlYktp
dDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3Bh
Y2UuY3BwCiAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5jcHAKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVDb29yZGluYXRvclByb3h5LmNwcAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAogICAgIFVJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcAogCiAgICAgVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5LmNwcApAQCAtNTAyLDcgKzUwMiw3IEBAIHNldChXZWJLaXQyX1NP
VVJDRVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcAor
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9VcGRhdGVBdGxhcy5jcHAKICkKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHNldChXZWJLaXQyX01F
U1NBR0VTX0lOX0ZJTEVTCiAgICAgVUlQcm9jZXNzL1dlYlZpYnJhdGlvblByb3h5Lm1lc3NhZ2Vz
LmluCiAKIAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkubWVzc2FnZXMuaW4KKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgogCiAgICAgVUlQcm9j
ZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5Lm1lc3NhZ2VzLmluCiAKQEAgLTU3OSw3ICs1Nzks
NyBAQCBzZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91
cFByb3h5Lm1lc3NhZ2VzLmluCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbgorICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNz
YWdlcy5pbgogKQogCiBzZXQoV2ViUHJvY2Vzc19FWEVDVVRBQkxFX05BTUUgV2ViUHJvY2VzcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaSBiL1NvdXJjZS9X
ZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnByaQppbmRleCAwZmRjNDljN2RhYmI0Y2FiZjBhMDE5YjJk
YjBlOGFiMDQ5MDVkOGE0Li40NDQ4MzM4ZmZlYmM5YzNmMmY5ODY4YTkxNDBkMWIwMjdjMWQ3YTM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcmkKKysrIGIvU291
cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJpCkBAIC02NCwxMCArNjQsMTAgQEAgVlBBVEgg
PSBcCiAKIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5t
ZXNzYWdlcy5pbiBcCisgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMu
aW4gXAogICAgIERvd25sb2FkUHJveHkubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhUHJv
eHkubWVzc2FnZXMuaW4gXAogICAgIEV2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbiBcCi0gICAg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5tZXNzYWdlcy5pbiBcCiAgICAgUGx1Z2luQ29udHJv
bGxlclByb3h5Lm1lc3NhZ2VzLmluIFwKICAgICBQbHVnaW5Qcm9jZXNzLm1lc3NhZ2VzLmluIFwK
ICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBcCkBAIC05OCw4ICs5OCw4
IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVz
c2FnZXMuaW4gXAogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluIFwKICAgICBX
ZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluIFwKKyAgICBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QubWVzc2FnZXMuaW4gXAogICAgIERyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIFwK
LSAgICBMYXllclRyZWVDb29yZGluYXRvci5tZXNzYWdlcy5pbiBcCiAgICAgV2ViSW5zcGVjdG9y
Lm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlLm1lc3NhZ2VzLmluIFwKICAgICBXZWJQYWdlR3Jv
dXBQcm94eS5tZXNzYWdlcy5pbiBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL01lc3NhZ2VJRC5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9N
ZXNzYWdlSUQuaAppbmRleCBmYTcwZDU1NzczNTllNzc3NGQxMjA3N2UyZmNlNjY5NjA2M2M5Y2Vi
Li5lZDYzZDU0NzllZmQzYjEzMmFkNjk5YTM4ZDkwYjQ5ZWNlMzViZjA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmgKQEAgLTM2LDggKzM2LDggQEAgZW51
bSBNZXNzYWdlQ2xhc3MgewogCiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgVUkgcHJvY2Vz
cyB0byB0aGUgd2ViIHByb2Nlc3MuCiAgICAgTWVzc2FnZUNsYXNzQXV0aGVudGljYXRpb25NYW5h
Z2VyLAorICAgIE1lc3NhZ2VDbGFzc0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCwKICAgICBNZXNz
YWdlQ2xhc3NEcmF3aW5nQXJlYSwKLSAgICBNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRv
ciwKICAgICBNZXNzYWdlQ2xhc3NXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlciwKICAgICBNZXNz
YWdlQ2xhc3NXZWJCYXR0ZXJ5TWFuYWdlclByb3h5LAogICAgIE1lc3NhZ2VDbGFzc1dlYkNvb2tp
ZU1hbmFnZXIsCkBAIC02MCw5ICs2MCw5IEBAIGVudW0gTWVzc2FnZUNsYXNzIHsKICNlbmRpZgog
CiAgICAgLy8gTWVzc2FnZXMgc2VudCBieSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIFVJIHByb2Nl
c3MuCisgICAgTWVzc2FnZUNsYXNzQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHksCiAgICAg
TWVzc2FnZUNsYXNzRG93bmxvYWRQcm94eSwKICAgICBNZXNzYWdlQ2xhc3NEcmF3aW5nQXJlYVBy
b3h5LAotICAgIE1lc3NhZ2VDbGFzc0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHksCiAgICAgTWVz
c2FnZUNsYXNzV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eSwKICAgICBNZXNzYWdlQ2xh
c3NXZWJCYXR0ZXJ5TWFuYWdlciwKICAgICBNZXNzYWdlQ2xhc3NXZWJDb25uZWN0aW9uLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKaW5kZXggMDQ3ZDE3MDdjYTMzNTBiZDlmMWEzMDRjNmI3YWU5ZTkwOGJkZDFiNC4uNTgz
Mzg5NmE4MTEwMGRjNDRhYjgxMDFhMDEzNzRhYzQ5NGVjZmU1MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0y
MTEsNyArMjExLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5o
IFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCiAgICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCi0gICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5o
IFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oIFwKICAgICBVSVByb2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmggXAog
ICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmggXApAQCAtMzc0LDggKzM3NCw4IEBAIEhF
QURFUlMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Fy
ZWFBbGxvY2F0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAorICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZFRpbGUuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhp
Z2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5
LmggXApAQCAtNTcxLDcgKzU3MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9CYWNr
aW5nU3RvcmUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQmFja2luZ1N0b3JlUXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5j
cHAgXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuY3BwIFwKKyAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRv
Q29udHJvbGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5j
cHAgXApAQCAtNzYwLDggKzc2MCw4IEBAIFNPVVJDRVMgKz0gXAogICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIFwKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHAgXAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9y
LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRl
QXRsYXMuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxl
ci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKaW5kZXgg
NTI3ZTkwNzc3YmEyMTNmZWZmZjhkNTMwYTUzMGFjODU5NmFlOTZiMC4uZTkwNTFlMjY4MWEzMTY0
ZGVjMzhhYjk3NWQ2OTMxOTRiMGRhZDhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmNwcApAQCAtMjIsMTEgKzIyLDExIEBACiAjaW5jbHVk
ZSAiRXdrVmlld0ltcGwuaCIKIAogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50RWZsLmgiCisj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJFZmxT
Y3JlZW5VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaW5kQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAi
Rm9ybUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIKICNpbmNsdWRlICJMYXllclRyZWVS
ZW5kZXJlci5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFnZUNs
aWVudERlZmF1bHRJbXBsLmgiCkBAIC0zNTEsMTEgKzM1MSwxMSBAQCBMYXllclRyZWVSZW5kZXJl
ciogRXdrVmlld0ltcGw6OmxheWVyVHJlZVJlbmRlcmVyKCkKICAgICBpZiAoIWRyYXdpbmdBcmVh
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFdlYktpdDo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eSogbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGRyYXdpbmdBcmVhLT5sYXllclRyZWVD
b29yZGluYXRvclByb3h5KCk7Ci0gICAgaWYgKCFsYXllclRyZWVDb29yZGluYXRvclByb3h5KQor
ICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KCk7CisgICAgaWYgKCFjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICByZXR1cm4gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJU
cmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkt
PmxheWVyVHJlZVJlbmRlcmVyKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZTVmM2QzZWQ0NzQwZmUw
MmY1MWQ1MWUxZTVlNjBlMzAxY2EwMDYwZC4uNmIzOTczMTg5NWRmYzAxOTVlMTRhN2E1Y2U0MjQ3
MTdhYjY2MThhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGlu
YXRvclByb3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIK
ICNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50
SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgpAQCAtNzAsOSArNzAsMTYg
QEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIpCiAg
ICAgaWYgKCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkg
PSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHko
KTsKLSAgICBpZiAobGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIo
KSkKLSAgICAgICAgbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIo
KS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBpZiAoY29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKSkKKyAgICAgICAgY29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0dy
YXBoaWNzQ29udGV4dChwYWludGVyKTsKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkqIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgp
Cit7CisgICAgaWYgKHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAgcmV0dXJu
IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkoKTsKKworICAgIHJldHVybiAwOwogfQogCiBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRh
dGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCkBAIC04
MCw4ICs4Nyw3IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dO
b2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKICAgICBpZiAoIWQtPndlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIG9sZE5vZGU7CiAKLSAgICBMYXll
clRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclByb3h5ID0gZC0+d2Vi
UGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7Ci0g
ICAgTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIg
PSBkLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigp
OwogCiAgICAgUXRXZWJQYWdlU0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dO
b2RlKj4ob2xkTm9kZSk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTU1LDkgKzE2MSw4IEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogewogICAgIFFTaXplRiBzY2FsZWRT
aXplID0gY29udGVudHNTaXplICogY29udGVudHNTY2FsZTsKIAotICAgIERyYXdpbmdBcmVhUHJv
eHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChk
cmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpKQot
ICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpLT5zZXRDb250
ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKGNvbnRlbnRzU2l6ZSkpOworICAgIGlmIChjb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpKQorICAgICAgICBjb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSgpLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKGNvbnRlbnRz
U2l6ZSkpOwogCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCmluZGV4IGM3YWM4
NmMzZDVjMmYyN2ZiMjVlYjU3ZTliNGMxMGUwZmQwMzE4NmQuLjcwYzRlN2EwOTJiNzRlNzljNDBh
NTE4ZTJjMzk4YjQ4NGE4YWE3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTI3LDYgKzI3LDcgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CiB9CiAKIGNsYXNzIFFR
dWlja1dlYlBhZ2VQcml2YXRlIHsKQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBwYWludChRUGFpbnRlciopOwogICAgIHZvaWQgcmVzZXRQYWludE5vZGUoKTsKKyAgICBXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSgpOwogCiAgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhh
bmRsZXI+IGV2ZW50SGFuZGxlcjsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwCmlu
ZGV4IDNmOWMzYjJhZTNiZTk4YzFhZGE0NTliYzNmYWVjMWI0Njg5ODhkOGYuLjJkZDQ1ZDBlZmZl
OWUwZjNmZmJhZDM2NDlkMzBlOTU3NmZiZjlkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKQEAgLTIwLDkgKzIwLDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19wLmgiCiAKKyNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkN1cnNvci5o
IgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNl
RXZlbnQuaCIKQEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpzZXRTaXplKGNv
bnN0IFFTaXplJiBzaXplKQogICAgIGlmIChkLT5tX3dlYlBhZ2VQcm94eS0+dXNlRml4ZWRMYXlv
dXQoKSkKICAgICAgICAgZC0+bV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZShzaXplKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBj
b29yZGluYXRvciA9IGRyYXdpbmdBcmVhLT5sYXllclRyZWVDb29yZGluYXRvclByb3h5KCk7Cisg
ICAgICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIGNvb3JkaW5hdG9y
ID0gZHJhd2luZ0FyZWEtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CiAgICAgICAg
IGlmICghY29vcmRpbmF0b3IpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvb3JkaW5h
dG9yLT5zZXRDb250ZW50c1NpemUoV2ViQ29yZTo6RmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwpAQCAtMzY4LDEwICszNjgsMTAgQEAgV2ViS2l0OjpMYXllclRyZWVSZW5k
ZXJlciogUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKICAgICBXZWJLaXQ6
OkRyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gZC0+bV93ZWJQYWdlUHJveHktPmRyYXdp
bmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3aW5nQXJlYSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
V2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvclByb3h5KiBsYXllclRyZWVDb29yZGluYXRvclBy
b3h5ID0gZHJhd2luZ0FyZWEtPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKTsKLSAgICBpZiAo
IWxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCisgICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSogY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBkcmF3aW5nQXJl
YS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICBpZiAoIWNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbGF5ZXJU
cmVlQ29vcmRpbmF0b3JQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CiB9CiAKIHZv
aWQgUVJhd1dlYlZpZXc6OnBhaW50KGNvbnN0IFFNYXRyaXg0eDQmIHRyYW5zZm9ybSwgZmxvYXQg
b3BhY2l0eSwgdW5zaWduZWQgcGFpbnRGbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjQyNzYwNzE0Y2Fk
ZDE0OTAwMWQxM2U4NzIzYWUwZDQ0OTFiOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwCkBAIC0wLDAgKzEsMjQ1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CisK
KyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQorICAgIDog
bV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJveHkpCisgICAgLCBtX3JlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCisgICAgLCBtX2xhc3RTZW50U2Nh
bGUoMCkKK3sKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6On5Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSgpCit7CisgICAgbV9yZW5kZXJlci0+ZGV0YWNoKCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKK3sK
KyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5j
dGlvbik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
LCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7CisgICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVy
SUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklE
IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit7CisgICAgU3VyZmFjZU1h
cDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lEKTsKKyAg
ICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVy
SUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRh
dGVSZWN0LCB0aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JM
YXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBtX3Jl
bmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29u
c3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQo
IW1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3VyZmFjZXMuYWRkKGF0bGFz
SUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpOworfQorCit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKQoreworICAgIEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAg
ICBtX3N1cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQg
aWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0
ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVy
SUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFJvb3RMYXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQorCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0
ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKK3sKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIGluZm8pKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVu
LCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKK30KKworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0
aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZmlsdGVycykpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKK3sKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKK30KK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25z
dCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCit7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUN1c3RvbUZpbHRl
clByb2dyYW0sIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBwcm9ncmFtSW5mbykpOworfQorI2VuZGlm
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgY292ZXJlZFJlY3QpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3JlbmRlcmVyLmdldCgpKSk7CisgICAgdXBkYXRl
Vmlld3BvcnQoKTsKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKyAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXplLCBjb3ZlcmVkUmVj
dCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZW50c1NpemUpOworICAgIFVOVVNFRF9Q
QVJBTShjb3ZlcmVkUmVjdCk7CisjZW5kaWYKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlJiBoYW5kbGUpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cywgbV9yZW5kZXJl
ci5nZXQoKSwgaW1hZ2VJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVJ
bWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgY29udGVudHNTaXplKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRDb250ZW50c1NpemUsIG1fcmVuZGVyZXIuZ2V0KCksIGNvbnRlbnRzU2l6ZSkp
OworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYgYW5pbWF0aW9ucykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0TGF5ZXJBbmltYXRpb25zLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgYW5pbWF0aW9u
cykpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRp
b25zTG9ja2VkKGJvb2wgbG9ja2VkKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgpLCBsb2Nr
ZWQpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBG
bG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIC8vIEluZm9ybSB0aGUgcmVuZGVy
ZXIgdG8gYWRqdXN0IHZpZXdwb3J0LWZpeGVkIGxheWVycy4KKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5kZXJl
ci5nZXQoKSwgcmVjdCkpOworCisgICAgaWYgKHJlY3QgPT0gbV9sYXN0U2VudFZpc2libGVSZWN0
ICYmIHNjYWxlID09IG1fbGFzdFNlbnRTY2FsZSAmJiB0cmFqZWN0b3J5VmVjdG9yID09IG1fbGFz
dFNlbnRUcmFqZWN0b3J5VmVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3QocmVjdCwgc2NhbGUsIHRyYWplY3Rv
cnlWZWN0b3IpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworICAgIG1f
bGFzdFNlbnRWaXNpYmxlUmVjdCA9IHJlY3Q7CisgICAgbV9sYXN0U2VudFNjYWxlID0gc2NhbGU7
CisgICAgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IgPSB0cmFqZWN0b3J5VmVjdG9yOworfQor
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQor
eworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZyYW1lKCksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZXF1
ZXN0QW5pbWF0aW9uRnJhbWUoKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKKyAg
ICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OkFuaW1hdGlvbkZyYW1lUmVhZHkoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7Cit9CisKKyNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmIGNhbnZhc1NpemUs
IGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKK3sKKyAgICBHcmFwaGljc1N1cmZh
Y2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3VwcG9ydHNUZXh0dXJl
VGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcywgbV9yZW5kZXJlci5n
ZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUs
IHN1cmZhY2VGbGFncywgdG9rZW4pKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcikKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
c3luY0NhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEIGlkKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpkZXN0cm95Q2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQorI2VuZGlmCisK
K3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Cit7CisgICAgbV9zdXJmYWNlcy5jbGVhcigpOworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJhY2tncm91
bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCit7CisgICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvciwgbV9yZW5kZXJl
ci5nZXQoKSwgY29sb3IpKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI1MWIzNDEzOTM3ZDA1ZmQyYWNlNTQ2YTA0NWZhOTA1YTA4YTEyZTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0wLDAgKzEsMTEzIEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5X2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlfaAorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5j
bHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRl
ICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NTdXJmYWNlVG9rZW4uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29vcmRp
bmF0ZWRMYXllckluZm87CitjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKK2NsYXNzIENvb3JkaW5h
dGVkTGF5ZXJVcGRhdGVJbmZvOworCitjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKKyAgICB+
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5n
TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgY3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJik7CisgICAgdm9p
ZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYKKyAgICB2b2lkIGRl
bGV0ZUNvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRDb250
ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IHNjYWxlLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKKyAgICB2b2lkIGRpZFJl
bmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOworICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVy
KENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JM
YXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCByZW1vdmVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQg
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CisgICAgdm9pZCBj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAg
IHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAg
IHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYpOworICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2ViQ29yZTo6
RmxvYXRQb2ludCYgcG9zaXRpb24pOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZv
aWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7CisgICAgdm9pZCBzeW5j
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOworICAgIHZv
aWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworI2VuZGlmCisgICAgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKKyAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRM
YXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsK
KyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5p
bWF0aW9uRnJhbWUoKTsKKyAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKKyNlbmRpZgor
ICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKKworICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKKyAgICBSZWZQ
dHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKKyAgICBmbG9hdCBtX2xhc3RTZW50U2NhbGU7CisgICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcjsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4gPiBTdXJmYWNlTWFwOworICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlczsKK307CisKK30K
KworI2VuZGlmCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxYWQzMmE2M2JkMmEyZDAxM2NmODNlZjRmZDI1
ZWRkMWI4ZWQxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdl
cy5pbgpAQCAtMCwwICsxLDU5IEBACisjCisjICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyMKKyMgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworIyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyMgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisjCisjICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkgeworICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBp
ZCwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0Q29tcG9z
aXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVu
KQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVy
cyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQorI2VuZGlm
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKKyAg
ICBSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKKyNlbmRpZgorICAgIFNldFJvb3RD
b21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQorICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIo
dWludDMyX3QgaWQpCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNl
VXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktp
dDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBSZW1vdmVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQorICAgIENyZWF0ZVVwZGF0ZUF0bGFz
KHVpbnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlKQorICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCisgICAgQ3Jl
YXRlSW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCisgICAgVXBkYXRlSW1hZ2VCYWNraW5n
KHVpbnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUg
aGFuZGxlKQorICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkK
KyAgICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKKyAgICBEaWRSZW5kZXJG
cmFtZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3Zl
cmVkUmVjdCkKKyAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50
IHBvc2l0aW9uKQorICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKKyAgICBTZXRBbmltYXRpb25zTG9j
a2VkKGJvb2wgbG9ja2VkKQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQor
ICAgIFJlcXVlc3RBbmltYXRpb25GcmFtZSgpCisjZW5kaWYKKworI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQorICAgIENyZWF0ZUNhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBj
YW52YXNTaXplLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKKyAgICBTeW5j
Q2FudmFzKHVpbnQzMl90IGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKKyAgICBEZXN0cm95Q2Fu
dmFzKHVpbnQzMl90IGlkKQorI2VuZGlmCisKKyAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29y
ZTo6Q29sb3IgY29sb3IpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxODAz
NjQ5OTk0OTc0YWI0Yzg4ZDMxMDg0YTMzNTdiOTYyMDRmOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxh
eWVyVHJlZVJlbmRlcmVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eShEcmF3aW5nQXJlYVBy
b3h5KiBkcmF3aW5nQXJlYVByb3h5KQotICAgIDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdB
cmVhUHJveHkpCi0gICAgLCBtX3JlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclRyZWVSZW5kZXJl
cih0aGlzKSkpCi0gICAgLCBtX2xhc3RTZW50U2NhbGUoMCkKLXsKLX0KLQotTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6fkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKQotewotICAgIG1fcmVu
ZGVyZXItPmRldGFjaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnVw
ZGF0ZVZpZXdwb3J0KCkKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6ZGlzcGF0Y2hVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgbV9yZW5kZXJlci0+YXBw
ZW5kVXBkYXRlKGZ1bmN0aW9uKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpjcmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVy
SUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOwotICAgIHVwZGF0ZVRpbGVGb3JM
YXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0gICAgU3Vy
ZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lE
KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCks
IGxheWVySUQsIHRpbGVJRCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5m
by51cGRhdGVSZWN0LCB0aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZz
ZXQpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVtb3ZlVGlsZUZv
ckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1f
cmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwotfQotCi12b2lkIExheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgQVNTRVJUKCFt
X3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lE
LCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
KQotewotICAgIEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1
cmZhY2VzLnJlbW92ZShhdGxhc0lEKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpkZWxldGVDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1f
cmVuZGVyZXIuZ2V0KCksIGlkKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCwg
bV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclBy
b3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25z
dCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9yZW5kZXJlci5nZXQoKSwgaWQs
IGluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3Np
dGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgY2hpbGRyZW4pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4sIG1fcmVuZGVyZXIuZ2V0KCksIGlk
LCBjaGlsZHJlbikpOwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvclByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycywgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKENT
U19TSEFERVJTKQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpyZW1vdmVDdXN0b21G
aWx0ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwg
aWQpKTsKLX0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlQ3VzdG9tRmls
dGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZv
JiBwcm9ncmFtSW5mbykKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHBy
b2dyYW1JbmZvKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5
OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0KQotewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJlci5n
ZXQoKSkpOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci0jaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RP
UkUpCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPmRpZFJlbmRlckZyYW1lKGNvbnRl
bnRzU2l6ZSwgY292ZXJlZFJlY3QpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGVudHNT
aXplKTsKLSAgICBVTlVTRURfUEFSQU0oY292ZXJlZFJlY3QpOwotI2VuZGlmCi19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFn
ZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6dXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nLCBtX3JlbmRlcmVyLmdldCgp
LCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50
cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1f
cmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRv
clByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlEKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1v
dmVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXpl
JiBjb250ZW50c1NpemUpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFu
aW1hdGlvbnMpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyQW5pbWF0aW9ucywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRBbmltYXRpb25zTG9ja2Vk
KGJvb2wgbG9ja2VkKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgpLCBsb2NrZWQpKTsKLX0K
LQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRy
YWplY3RvcnlWZWN0b3IpCi17Ci0gICAgLy8gSW5mb3JtIHRoZSByZW5kZXJlciB0byBhZGp1c3Qg
dmlld3BvcnQtZml4ZWQgbGF5ZXJzLgotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0LCBtX3JlbmRlcmVyLmdldCgpLCByZWN0
KSk7Ci0KLSAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJlY3QgJiYgc2NhbGUgPT0g
bV9sYXN0U2VudFNjYWxlICYmIHRyYWplY3RvcnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3Rv
cnlWZWN0b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpTZXRW
aXNpYmxlQ29udGVudHNSZWN0KHJlY3QsIHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLSAgICBtX2xhc3RTZW50VmlzaWJsZVJl
Y3QgPSByZWN0OwotICAgIG1fbGFzdFNlbnRTY2FsZSA9IHNjYWxlOwotICAgIG1fbGFzdFNlbnRU
cmFqZWN0b3J5VmVjdG9yID0gdHJhamVjdG9yeVZlY3RvcjsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvclByb3h5OjpyZW5kZXJOZXh0RnJhbWUoKQotewotICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5h
dG9yOjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKLX0KLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZvaWQgTGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLXsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZy
YW1lLCBtX3JlbmRlcmVyLmdldCgpKSk7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjphbmltYXRpb25GcmFtZVJlYWR5KCkKLXsKLSAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpM
YXllclRyZWVDb29yZGluYXRvcjo6QW5pbWF0aW9uRnJhbWVSZWFkeSgpLCBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3JlbmRlcmVyLmdldCgpLCBwb3NpdGlvbikpOwot
fQotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUm
IGNhbnZhc1NpemUsIGNvbnN0IEdyYXBoaWNzU3VyZmFjZVRva2VuJiB0b2tlbikKLXsKLSAgICBH
cmFwaGljc1N1cmZhY2U6OkZsYWdzIHN1cmZhY2VGbGFncyA9IEdyYXBoaWNzU3VyZmFjZTo6U3Vw
cG9ydHNUZXh0dXJlVGFyZ2V0IHwgR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1NoYXJpbmc7Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcywg
bV9yZW5kZXJlci5nZXQoKSwgaWQsIGNhbnZhc1NpemUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRl
KGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9rZW4pKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3JQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQz
Ml90IGZyb250QnVmZmVyKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgZnJvbnRCdWZmZXIpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpkZXN0cm95Q2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKLX0KLSNlbmRp
ZgotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Ci17Ci0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yOjpQdXJn
ZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3Io
Y29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1fcmVuZGVyZXIuZ2V0KCks
IGNvbG9yKSk7Ci19Ci0KLX0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVDb29yZGluYXRvclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJmYjMwYzRhNzFjMzQ4YTIzYTNiMzA3MTJiYWM3MjkxODJiMTQ2
NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSovCi0KLSNpZm5kZWYgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eV9oCi0jZGVmaW5lIExheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHlfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
Ci0jaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKLSNp
bmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVk
ZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2Uu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1h
dGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87Ci1jbGFzcyBM
YXllclRyZWVSZW5kZXJlcjsKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJVcGRhdGVJbmZvOwotCi1j
bGFzcyBMYXllclRyZWVDb29yZGluYXRvclByb3h5IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMYXllclRyZWVDb29yZGluYXRvclByb3h5KTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXllclRyZWVDb29yZGluYXRvclByb3h5KERyYXdp
bmdBcmVhUHJveHkqKTsKLSAgICB+TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSgpOwotICAgIHZv
aWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJl
bihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7
Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZp
bHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBjcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNl
bmRpZgotICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVySUQp
OwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsK
LSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAg
ICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jiwg
ZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
OwotICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVu
dHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBj
cmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZv
aWQgdXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAg
ICB2b2lkIHJlbW92ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCk7Ci0gICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRl
QXRsYXModWludDMyX3QgYXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5k
bGUmKTsKLSAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQ
Qzo6TWVzc2FnZURlY29kZXImKTsKLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7Ci0gICAgdm9p
ZCByZW5kZXJOZXh0RnJhbWUoKTsKLSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiYpOwot
ICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVm
ZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRp
ZgotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgTGF5ZXJUcmVlUmVuZGVyZXIq
IGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKLSAgICB2b2lkIHNldEFuaW1hdGlvbnNM
b2NrZWQoYm9vbCk7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZv
aWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7Ci0gICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5
KCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpD
b2xvciYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5j
dGlvbjx2b2lkKCk+Jik7Ci0KLSAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJv
eHk7Ci0gICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOwotICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX2xhc3RTZW50VmlzaWJsZVJlY3Q7Ci0gICAgZmxvYXQgbV9sYXN0U2Vu
dFNjYWxlOwotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0
b3I7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+ID4gU3VyZmFjZU1hcDsKLSAgICBTdXJmYWNlTWFwIG1fc3VyZmFj
ZXM7Ci19OwotCi19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLy8gTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlQ29vcmRpbmF0b3JQ
cm94eS5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVmN2I4MGJi
N2EzNzE5MDc2OTcxMjdkODEwYTAyOTVjYWY0NzUzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvclByb3h5Lm1lc3NhZ2VzLmluCisrKyAvZGV2
L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0jCi0jICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSMgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0jICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0jICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0jICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotIwotIyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW1lc3NhZ2VzIC0+IExheWVyVHJlZUNvb3Jk
aW5hdG9yUHJveHkgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwg
V2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCi0gICAgU2V0Q29tcG9zaXRp
bmdMYXllckNoaWxkcmVuKHVpbnQzMl90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1
aW50MzJfdCBpZCwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQotI2VuZGlmCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIENyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyBwcm9ncmFtSW5mbykKLSAgICBS
ZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKLSNlbmRpZgotICAgIFNldFJvb3RDb21w
b3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQotICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIodWlu
dDMyX3QgaWQpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6
U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBSZW1vdmVUaWxlRm9yTGF5ZXIodWlu
dDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQotICAgIENyZWF0ZVVwZGF0ZUF0bGFzKHVp
bnQzMl90IGF0bGFzSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFu
ZGxlKQotICAgIFJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi0gICAgQ3JlYXRl
SW1hZ2VCYWNraW5nKHVpbnQ2NF90IGltYWdlSUQpCi0gICAgVXBkYXRlSW1hZ2VCYWNraW5nKHVp
bnQ2NF90IGltYWdlSUQsIFdlYktpdDo6V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUgaGFu
ZGxlKQotICAgIENsZWFySW1hZ2VCYWNraW5nQ29udGVudHModWludDY0X3QgaW1hZ2VJRCkKLSAg
ICBSZW1vdmVJbWFnZUJhY2tpbmcodWludDY0X3QgaW1hZ2VJRCkKLSAgICBEaWRSZW5kZXJGcmFt
ZShXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSwgV2ViQ29yZTo6SW50UmVjdCBjb3ZlcmVk
UmVjdCkKLSAgICBEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBv
c2l0aW9uKQotICAgIFNldExheWVyQW5pbWF0aW9ucyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFuaW1hdGlvbnMgYW5pbWF0aW9ucykKLSAgICBTZXRBbmltYXRpb25zTG9ja2Vk
KGJvb2wgbG9ja2VkKQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAg
IFJlcXVlc3RBbmltYXRpb25GcmFtZSgpCi0jZW5kaWYKLQotI2lmIFVTRShHUkFQSElDU19TVVJG
QUNFKQotICAgIENyZWF0ZUNhbnZhcyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6SW50U2l6ZSBjYW52
YXNTaXplLCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbikKLSAgICBTeW5jQ2Fu
dmFzKHVpbnQzMl90IGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLSAgICBEZXN0cm95Q2FudmFz
KHVpbnQzMl90IGlkKQotI2VuZGlmCi0KLSAgICBTZXRCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6
Q29sb3IgY29sb3IpCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cAppbmRleCA2MzQxZDM1NWJmZTg3MTdjZmMwMTZkMDlhZTZjYWUxOWY0OGM5NGI1Li43YzYzNDUy
ODhhM2ViOTMzN2NkY2ZlNDYyNTljZmQ0NDZhOThjZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJU
cmVlUmVuZGVyZXIuY3BwCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVlUmVu
ZGVyZXIuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHku
aCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgpAQCAtNzEsOCArNzEsOCBAQCBz
dGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogbGF5
ZXIpCiAgICAgcmV0dXJuIGxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29udGVudHNB
cmVWaXNpYmxlKCkgJiYgIWxheWVyLT5zaXplKCkuaXNFbXB0eSgpOwogfQogCi1MYXllclRyZWVS
ZW5kZXJlcjo6TGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSogbGF5
ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSkKLSAgICA6IG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eShsYXllclRyZWVDb29yZGluYXRvclByb3h5KQorTGF5ZXJUcmVlUmVuZGVyZXI6OkxheWVyVHJl
ZVJlbmRlcmVyKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSkKKyAgICA6IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoY29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCiAgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQogICAg
ICwgbV9yb290TGF5ZXJJRChJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQogICAgICwgbV9hbmlt
YXRpb25zTG9ja2VkKGZhbHNlKQpAQCAtMTU0LDggKzE1NCw4IEBAIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5KCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+YW5pbWF0aW9u
RnJhbWVSZWFkeSgpOworICAgIGlmIChtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5hbmltYXRpb25GcmFtZVJl
YWR5KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlcXVlc3RBbmltYXRpb25GcmFt
ZSgpCkBAIC0yMDAsOCArMjAwLDggQEAgdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB2b2lkIExheWVyVHJlZVJlbmRl
cmVyOjp1cGRhdGVWaWV3cG9ydCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUNv
b3JkaW5hdG9yUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVz
dFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQpAQCAtNjA5LDggKzYwOSw4IEBAIHZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIAogdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6cmVuZGVyTmV4dEZyYW1lKCkKIHsKLSAgICBpZiAobV9sYXllclRyZWVDb29yZGluYXRvclBy
b3h5KQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHktPnJlbmRlck5leHRGcmFt
ZSgpOworICAgIGlmIChtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBt
X2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsKIH0KIAog
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKQEAgLTY3NCw4ICs2NzQs
OCBAQCB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKIAogdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKIHsKLSAgICBpZiAobV9sYXll
clRyZWVDb29yZGluYXRvclByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHktPnB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIGlmIChtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5wdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKIH0KIAogdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1h
dGlvbnMmIGFuaW1hdGlvbnMpCkBAIC03MDUsNyArNzA1LDcgQEAgdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKIHZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OmRldGFjaCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2xh
eWVyVHJlZUNvb3JkaW5hdG9yUHJveHkgPSAwOworICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkgPSAwOwogfQogCiB2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuaAppbmRleCBhNjcyMjc0MDllN2YwMGZlY2MwMDczMTc2ZTFmZWQwZDdjODU1ZmI1Li42
OWI4MWE0OWJiYjExNDc1NTYwNGI3YWJkY2MyMWE1OGVlNTQ3NGUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgVGV4dHVyZU1hcHBlckxh
eWVyOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
OwotY2xhc3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTsKK2NsYXNzIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OwogY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CiBjbGFzcyBDb29y
ZGluYXRlZExheWVyVXBkYXRlSW5mbzsKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgIH07Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVuZGVyZXIo
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSopOworICAgIGV4cGxpY2l0IExheWVyVHJlZVJlbmRl
cmVyKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Kik7CiAgICAgdmlydHVhbCB+TGF5ZXJU
cmVlUmVuZGVyZXIoKTsKICAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIFdlYkNvcmU6OlRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgPSAwKTsKICAgICB2b2lk
IHBhaW50VG9HcmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCk7CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaCgpOwogICAg
IHZvaWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKIAotICAgIC8vIFRo
ZSBwYWludGluZyB0aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byB1c2UgYmVsb3cg
dHdvIG1ldGhvZHMsIGJlY2F1c2UgdHdvIG1ldGhvZHMgYWNjZXNzIG1lbWJlcnMgdGhhdCB0aGUg
bWFpbiB0aHJlYWQgbWFuYWdlcy4gU2VlIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS4KKyAg
ICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gdXNl
IGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNlIHR3byBtZXRob2RzIGFjY2VzcyBtZW1iZXJzIHRo
YXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMuIFNlZSBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LgogICAgIC8vIEN1cnJlbnRseSwgUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2Rl
KCkgbG9ja3MgdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBjYWxsaW5nIGJvdGggbWV0aG9kcy4KICAg
ICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKQEAg
LTE3NSw3ICsxNzUsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAvLyBCZWxvdyB0d28gbWVt
YmVycyBhcmUgYWNjZXNzZWQgYnkgb25seSB0aGUgbWFpbiB0aHJlYWQuIFRoZSBwYWludGluZyB0
aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byBhY2Nlc3MgYm90aCBtZW1iZXJzLgot
ICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94
eTsKKyAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogbV9jb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTsKICAgICBib29sIG1faXNBY3RpdmU7CiAKICAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggOTAwZDZhNTg4MmZmMjQ5ODI3YjYwNDJmZjUz
YjA2ZTc1M2U2N2ZhZi4uMDdlYWEzYWMzNTIzOThjN2MwYzg5ODUzZDdjODRhMzIwNWNjYjk2YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNwcApAQCAt
MjksNyArMjksNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkuaCIK
KyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgPENv
cmVJUEMvTWVzc2FnZUlELmg+CiAjZW5kaWYKIApAQCAtNjksNyArNjksNyBAQCBXZWJDb3JlOjpJ
bnRSZWN0IERyYXdpbmdBcmVhUHJveHk6OmNvbnRlbnRzUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJu
IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV93ZWJQYWdlUHJveHktPnZpZXdTaXplKCkpOwog
fQogCi12b2lkIERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
clByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpCit2b2lkIERyYXdpbmdBcmVhUHJveHk6OmRpZFJlY2Vp
dmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlv
biosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKQogewogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAppbmRl
eCBkNjc5OWRkNWJlOTBiYmEzMmMxM2UxNzk1YWU1MTQzZjAxZjllYzA2Li4xZWIxODE5NTFiMGJl
YmQwODE1ODdjOWFjYzg0YjdhMjQ1ZTNjNDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRleHQ7Ci1jbGFzcyBM
YXllclRyZWVDb29yZGluYXRvclByb3h5OworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCkBAIC04NSw5
ICs4NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnRlbnRzUmVjdCgpOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNv
bnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkqIGxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkuZ2V0KCk7IH0KKyAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogY29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmdldCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVD
b250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiAvKiB2aXNpYmxlQ29udGVudHNS
ZWN0ICovLCBmbG9hdCAvKiBzY2FsZSAqLywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgLyog
dHJhamVjdG9yeVZlY3RvciAqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVMYXll
clRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQ
Qzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jik7CiAKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2VQcm94eTsg
fQogI2VuZGlmCkBAIC0xMDEsNyArMTAxLDcgQEAgcHJvdGVjdGVkOgogICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgT3duUHRyPExheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk+IG1fbGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTsKKyAgICBPd25QdHI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk+IG1fY29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDEz
OGY0Yzg4NzBiOTk4MGY2NTA3N2FiODJlZjk1YjI0Zjc5NWMxZmYuLjRjYjM0YTQyZjQ4ZWM1Yjlj
Y2RkYWViMDY3M2IwNGNjNjRmMjBlN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUmVnaW9uLmg+CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5j
bHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC02MSw3ICs2MSw3IEBAIERyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3aW5nQXJlYVByb3h5
SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAgICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBhbGxvdyBtZXNzYWdl
cyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBlbnRlcmVkIHRoZXJl
LgogICAgIGlmICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5mb3Jj
ZUNvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkg
PSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSh0aGlzKSk7CisgICAgICAg
IG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkodGhpcykpOwogI2VuZGlmCiB9CiAKQEAgLTM2MCwyMiArMzYw
LDIyIEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4CiAgICAgbV9sYXllclRyZWVDb250ZXh0ID0g
bGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgaWYgKCFtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1f
bGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eSA9IGFkb3B0UHRyKG5ldyBMYXllclRyZWVDb29yZGlu
YXRvclByb3h5KHRoaXMpKTsKKyAgICBpZiAoIW1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkpCisgICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihu
ZXcgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkodGhpcykpOwogI2VuZGlmCiB9CiAKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpk
aWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6
TWVzc2FnZURlY29kZXImIGRlY29kZXIpCit2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjpkaWRS
ZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6
Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIGlmIChtX2xheWVyVHJlZUNvb3JkaW5h
dG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS0+ZGlkUmVjZWl2
ZUxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwg
ZGVjb2Rlcik7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCisgICAg
ICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmRpZFJlY2VpdmVDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVy
KTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6c2V0VmlzaWJsZUNvbnRlbnRzUmVj
dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHNj
YWxlLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewotICAg
IGlmIChtX2xheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlQ29v
cmRpbmF0b3JQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0
LCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7CisgICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkpCisgICAgICAgIG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnNl
dFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgc2NhbGUsIHRyYWplY3Rv
cnlWZWN0b3IpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmgKaW5kZXggZmUwNTEwZWY4NjFkNGY5NmYxMDBiZWZmMjVjYjJm
MGY5MTc0ZTBhNy4uNmNlZDIwN2I0Y2M2OThiN2QyYTVjM2Y2YTJiN2RhM2NiYmIyMWZjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmgKQEAg
LTM5LDcgKzM5LDcgQEAgY2xhc3MgUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTsKK2NsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OwogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5SW1wbCA6IHB1YmxpYyBEcmF3aW5n
QXJlYVByb3h5IHsKIHB1YmxpYzoKQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
KTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgdmlydHVhbCB2b2lkIHNldFZp
c2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVu
dHNSZWN0LCBmbG9hdCBzY2FsZSwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9y
eSk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2Fn
ZURlY29kZXImKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICNlbmRpZgogI2Vsc2UKICAgICBib29sIGlzSW5BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDhhMjliNjlkZDcwNDk1MDgz
NWU3M2RiNDZhYmY5OGU0NmU2MmI1MjUuLjdlYWFjNTIyMzA3ZmQ2NDA5YThmYTViMzA1ODkzZTJi
NWI5MmE2YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC05Niw3ICs5Niw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQpAQCAtMTg2Miw4ICsxODYyLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6
Ok0KICAgICB9CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1lc3Nh
Z2VJRC5pczxDb3JlSVBDOjpNZXNzYWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvclByb3h5Pigp
KSB7Ci0gICAgICAgIG1fZHJhd2luZ0FyZWEtPmRpZFJlY2VpdmVMYXllclRyZWVDb29yZGluYXRv
clByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOworICAgIGlmICht
ZXNzYWdlSUQuaXM8Q29yZUlQQzo6TWVzc2FnZUNsYXNzQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk+KCkpIHsKKyAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCmluZGV4IGI5MzQ2MzQ2YzM2YzM0NmZiOTVl
MjRiODMyY2E2MmU3N2IyMmQxMjAuLjI3M2QwNjQ2Zjk1NTYyOTNmY2VlMWVkZjFkNDY3ZjZiOTU2
ZGQ2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJh
c2UuY3BwCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJQYWdlQ2xpZW50QmFzZS5oIgogCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgogI2luY2x1ZGUgIkV3
a1ZpZXdJbXBsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0jaW5jbHVk
ZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRl
cmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VDbGllbnRMZWdhY3lJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudExlZ2FjeUltcGwuY3BwCmluZGV4IGU1NjY4NzU2ZDg1YmFhYzg5YWY4N2JmNWNm
NTkwYTU1MTEzZmM5ZmIuLjE1NzBiYzk5N2U0ZDkxNjFkYTM5ZTIzNGVjNzk1NWE0ODhiNDczODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExlZ2Fj
eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudExl
Z2FjeUltcGwuY3BwCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIKIAorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiRXdrVmlld0ltcGwuaCIKLSNpbmNsdWRlICJM
YXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJld2tfdmlldy5oIgogCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgUGFnZUNsaWVu
dExlZ2FjeUltcGw6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpW
aWV3cG9ydEF0CiB2b2lkIFBhZ2VDbGllbnRMZWdhY3lJbXBsOjpkaWRDaGFuZ2VDb250ZW50c1Np
emUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKIHsKICNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKLSAgICBtX3ZpZXdJbXBsLT5wYWdlKCktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJl
ZUNvb3JkaW5hdG9yUHJveHkoKS0+c2V0Q29udGVudHNTaXplKEZsb2F0U2l6ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX3ZpZXdJbXBsLT5wYWdlKCktPmRyYXdpbmdBcmVh
KCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPnNldENvbnRlbnRzU2l6ZShGbG9h
dFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CiAgICAgbV92aWV3SW1wbC0+dXBk
YXRlKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKaW5kZXggMDc0
NmY2NWQ5MjdmYTFkNjI0ZjRkNzQzMDllYTk1ODkyYTE0NTU3Zi4uZDE0YzRlZDRiODliZmJmZDNm
M2Q0NmI5NzM2MDFmOWEwNDUyODU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3Bw
CkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKIAorI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiRXdrVmll
d0ltcGwuaCIKLSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvclByb3h5LmgiCiAjaW5jbHVk
ZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTU2LDcgKzU2LDcgQEAg
RHJhd2luZ0FyZWFQcm94eSogUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZHJhd2lu
Z0FyZWEoKSBjb25zdAogCiB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNl
dFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZlKQogewotICAgIGRyYXdpbmdBcmVhKCktPmxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZlKGFj
dGl2ZSk7CisgICAgZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHko
KS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZlKGFjdGl2ZSk7CiB9CiAKIHZvaWQgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6dXBkYXRlVmlld3BvcnRTaXplKGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdmll
d3BvcnQKIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VD
b250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplKQogewotICAg
IGRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHkoKS0+c2V0Q29udGVudHNT
aXplKGNvbnRlbnRzU2l6ZSk7CisgICAgZHJhd2luZ0FyZWEoKS0+Y29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkoKS0+c2V0Q29udGVudHNTaXplKGNvbnRlbnRzU2l6ZSk7CiAgICAgbV92aWV3
SW1wbC0+dXBkYXRlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IDg0NjY4Y2UxNTU5YjI5YTMyZmQz
NmFhZTQ5YjEwNzNhODlkODM2NDUuLmIzYmU4NDAzZTMwMTAyOTdlODFkMzUxOTc2Mzc1NmM3OWJh
MzkzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMjYsMTMgKzI2LDEzIEBACiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgiCiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRUaWxlLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWY0NGViZmMxMGNiYTlmN2M3NmY4NjE4MTdhZWMyZjdjZDc4ZDU0YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTAsMCArMSw4Mzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5j
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgiCisKKyNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWVzc2FnZUlELmgiCisjaW5jbHVkZSAi
U3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
KyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisKKyNpZiBF
TkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgIlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFz
c1JlZlB0cjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlKFdlYlBhZ2UqIHdlYlBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Qod2ViUGFnZSkpOworfQorCitDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKQoreworI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKKyAgICBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKKyNlbmRpZgor
CisgICAgLy8gUHJldmVudCBzZXRDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQoMCkgLT4g
ZGV0YWNoTGF5ZXIoKSBmcm9tIG1vZGlmeWluZyB0aGUgc2V0IHdoaWxlIHdlIGl0ZXJhdGUgaXQu
CisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiByZWdpc3Rl
cmVkTGF5ZXJzOworICAgIHJlZ2lzdGVyZWRMYXllcnMuc3dhcChtX3JlZ2lzdGVyZWRMYXllcnMp
OworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRl
cmF0b3IgZW5kID0gcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0gcmVnaXN0ZXJl
ZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5zZXRDb29y
ZGluYXRvcigwKTsKK30KKworQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QoV2ViUGFnZSogd2ViUGFnZSkKKyAgICA6IExheWVyVHJlZUhvc3Qod2ViUGFn
ZSkKKyAgICAsIG1fbm90aWZ5QWZ0ZXJTY2hlZHVsZWRMYXllckZsdXNoKGZhbHNlKQorICAgICwg
bV9pc1ZhbGlkKHRydWUpCisgICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKKyAgICAsIG1fd2FpdGlu
Z0ZvclVJUHJvY2Vzcyh0cnVlKQorICAgICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKKyAgICAsIG1f
Y29udGVudHNTY2FsZSgxKQorICAgICwgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGUo
dHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZyYW1lKGZhbHNlKQorICAgICwgbV9kaWRJbml0aWFs
aXplUm9vdENvbXBvc2l0aW5nTGF5ZXIoZmFsc2UpCisgICAgLCBtX2xheWVyRmx1c2hUaW1lcih0
aGlzLCAmQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpsYXllckZsdXNoVGltZXJGaXJlZCkKKyAg
ICAsIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyKHRoaXMsICZDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKQorICAgICwgbV9sYXll
ckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1fZm9yY2VSZXBhaW50QXN5bmND
YWxsYmFja0lEKDApCisgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCit7CisgICAgLy8g
Q3JlYXRlIGEgcm9vdCBsYXllci4KKyAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZSh0aGlzLCB0aGlzKTsKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvb3JkaW5h
dGVkUm9vdExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0
KCkpOworICAgIGNvb3JkaW5hdGVkUm9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7CisjaWZu
ZGVmIE5ERUJVRworICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Qgcm9vdCBsYXllciIpOworI2VuZGlmCisgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29u
dGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkp
OworICAgIG1fbGF5ZXJUcmVlQ29udGV4dC5jb29yZGluYXRlZExheWVySUQgPSB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihjb29yZGluYXRlZFJvb3RMYXllciktPmlkKCk7CisKKyAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhp
cyk7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0
TmFtZSgiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IG5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsK
KyNlbmRpZgorICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShtX3dlYlBh
Z2UtPnNpemUoKSk7CisKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVk
Q29udGVudExheWVyLmdldCgpKTsKKworICAgIGlmIChtX3dlYlBhZ2UtPmhhc1BhZ2VPdmVybGF5
KCkpCisgICAgICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKworICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0TGF5ZXJG
bHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJGbHVzaGluZ0VuYWJsZWQpCit7CisgICAg
aWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkID09IGxheWVyRmx1c2hpbmdFbmFibGVk
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9
IGxheWVyRmx1c2hpbmdFbmFibGVkOworCisgICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdF
bmFibGVkKSB7CisgICAgICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3Q6OnNjaGVkdWxlTGF5ZXJGbHVzaCgpCit7CisgICAgaWYgKCFt
X2xheWVyRmx1c2hTY2hlZHVsaW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2xheWVyRmx1c2hUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVyRmx1c2hUaW1l
ci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
YW5jZWxQZW5kaW5nTGF5ZXJGbHVzaCgpCit7CisgICAgbV9sYXllckZsdXNoVGltZXIuc3RvcCgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkTm90aWZ5QWZ0
ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaCkKK3sKKyAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IG5vdGlmeUFm
dGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCit7CisgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOworICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0Q29udGVudHNP
cGFxdWUobV93ZWJQYWdlLT5kcmF3c0JhY2tncm91bmQoKSAmJiAhbV93ZWJQYWdlLT5kcmF3c1Ry
YW5zcGFyZW50QmFja2dyb3VuZCgpKTsKKworICAgIC8vIEFkZCB0aGUgYWNjZWxlcmF0ZWQgbGF5
ZXIgdHJlZSBoaWVyYXJjaHkuCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIpCisgICAgICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRMYXllci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBjYW5jZWxQ
ZW5kaW5nTGF5ZXJGbHVzaCgpOworCisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgbV9yb290
TGF5ZXIgPSBudWxscHRyOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBpZiAobV9wYWdlT3Zl
cmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKKworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIC8qIHNj
cm9sbE9mZnNldCAqLykKK3sKKyAgICBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxh
eShzY3JvbGxSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNl
UmVwYWludCgpCit7CisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHJ1bm5pbmcgbGF5b3V0
IHRlc3RzLiBTaW5jZSBpbiB0aGlzIGNhc2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBhIFVJUHJv
Y2VzcyB0byByZXBseSBuaWNlbHkuCisgICAgLy8gSW5zdGVhZCB3ZSBhcmUganVzdCB0cmlnZ2Vy
aW5nIGZvcmNlUmVwYWludC4gQnV0IHdlIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgc2NyaXB0ZWQg
YW5pbWF0aW9uIGNhbGxiYWNrcyBiZWluZyBleGVjdXRlZC4KKyAgICBzeW5jRGlzcGxheVN0YXRl
KCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgZmx1c2gsIG90aGVyd2lz
ZSB0aGUgZm9yY2VkIHBhaW50IG1pZ2h0IGNhbmNlbCBhIGxhdGVyIGV4cGVjdGVkIGZsdXNoLgor
ICAgIC8vIFRoaXMgaXMgYWxpZ25lZCB3aXRoIExheWVyVHJlZUhvc3RDQS4KKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKKyAgICBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKTsKK30KKworYm9v
bCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCit7CisgICAgLy8gV2UgZXhwZWN0IHRoZSBVSSBwcm9jZXNzIHRvIG5vdCByZXF1
aXJlIGEgbmV3IHJlcGFpbnQgdW50aWwgdGhlIHByZXZpb3VzIG9uZSBoYXMgZmluaXNoZWQuCisg
ICAgQVNTRVJUKCFtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCk7CisgICAgbV9mb3JjZVJl
cGFpbnRBc3luY0NhbGxiYWNrSUQgPSBjYWxsYmFja0lEOworICAgIHNjaGVkdWxlTGF5ZXJGbHVz
aCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6c2l6ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBuZXdTaXplKQoreworICAg
IGlmIChtX3Jvb3RMYXllci0+c2l6ZSgpID09IG5ld1NpemUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcm9vdExheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgLy8gSWYgdGhlIG5ld1Np
emUgZXhwb3NlcyBuZXcgYXJlYXMgb2YgdGhlIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQgYSBzZXRO
ZWVkc0Rpc3BsYXkgaXMgbmVlZGVkCisgICAgLy8gZm9yIHRob3NlIG5ld2x5IGV4cG9zZWQgYXJl
YXMuCisgICAgRmxvYXRTaXplIG9sZFNpemUgPSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIt
PnNpemUoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldFNpemUobmV3U2l6
ZSk7CisKKyAgICBpZiAobmV3U2l6ZS53aWR0aCgpID4gb2xkU2l6ZS53aWR0aCgpKSB7CisgICAg
ICAgIGZsb2F0IGhlaWdodCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PGZsb2F0PihuZXdTaXplLmhl
aWdodCgpKSwgb2xkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChvbGRTaXplLndpZHRoKCks
IDAsIG5ld1NpemUud2lkdGgoKSAtIG9sZFNpemUud2lkdGgoKSwgaGVpZ2h0KSk7CisgICAgfQor
CisgICAgaWYgKG5ld1NpemUuaGVpZ2h0KCkgPiBvbGRTaXplLmhlaWdodCgpKQorICAgICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChGbG9hdFJl
Y3QoMCwgb2xkU2l6ZS5oZWlnaHQoKSwgbmV3U2l6ZS53aWR0aCgpLCBuZXdTaXplLmhlaWdodCgp
IC0gb2xkU2l6ZS5oZWlnaHQoKSkpOworCisgICAgaWYgKG1fcGFnZU92ZXJsYXlMYXllcikKKyAg
ICAgICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRTaXplKG5ld1NpemUpOworCisgICAgc2NoZWR1
bGVMYXllckZsdXNoKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkaWRJ
bnN0YWxsUGFnZU92ZXJsYXkoKQoreworICAgIGNyZWF0ZVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAg
ICBzY2hlZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OmRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCkKK3sKKyAgICBkZXN0cm95UGFnZU92ZXJsYXlM
YXllcigpOworICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3ZlcmxheUxheWVyKTsKKyAgICBt
X3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICBzY2hl
ZHVsZUxheWVyRmx1c2goKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNl
dFBhZ2VPdmVybGF5T3BhY2l0eShmbG9hdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9wYWdlT3Zl
cmxheUxheWVyKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE9wYWNpdHkodmFsdWUpOwor
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBpZiAobV93YWl0aW5nRm9y
VUlQcm9jZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbml0aWFsaXplUm9vdENv
bXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOworCisgICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBpZiAo
bV9wYWdlT3ZlcmxheUxheWVyKQorICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGJvb2wgZGlkU3luYyA9IG1f
d2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CisKKyAgICBmbHVzaFBlbmRpbmdJbWFnZUJhY2tp
bmdDaGFuZ2VzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGV0YWNoZWRMYXll
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIobV9kZXRhY2hl
ZExheWVyc1tpXSkpOworICAgIG1fZGV0YWNoZWRMYXllcnMuY2xlYXIoKTsKKworICAgIGlmICht
X3Nob3VsZFN5bmNGcmFtZSkgeworICAgICAgICBkaWRTeW5jID0gdHJ1ZTsKKworICAgICAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IHJvdW5kZWRJbnRTaXplKG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRMYXllci0+c2l6ZSgpKTsKKyAgICAgICAgSW50UmVjdCBjb3ZlcmVkUmVjdCA9IHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSktPmNv
dmVyUmVjdCgpOworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpEaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRS
ZWN0KSk7CisgICAgICAgIG1fd2FpdGluZ0ZvclVJUHJvY2VzcyA9IHRydWU7CisgICAgICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHVubG9ja0FuaW1h
dGlvbnMoKTsKKworICAgIGlmIChtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkgeworICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNr
KG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKSk7CisgICAgICAgIG1fZm9yY2VSZXBhaW50
QXN5bmNDYWxsYmFja0lEID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gZGlkU3luYzsKK30KKwor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmluaXRpYWxpemVSb290Q29tcG9zaXRpbmdM
YXllcklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5n
TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlNldFJvb3RDb21wb3NpdGluZ0xheWVyKHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1fcm9vdExheWVyLmdldCgpKS0+aWQoKSkpOworICAg
IG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3NpdGluZ0xheWVyID0gdHJ1ZTsKKyAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpz
eW5jTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5
ZXJJbmZvJiBpbmZvKQoreworICAgIGlmIChtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0
ZSkgeworICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1Jl
Y3QubG9jYXRpb24oKSkpOworICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0
ZSA9IGZhbHNlOworICAgIH0KKworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpT
ZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoaWQsIGluZm8pKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkcmVuKQoreworICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQs
IGNoaWxkcmVuKSk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBQ
bGF0Zm9ybUxheWVyKiBjYW52YXNQbGF0Zm9ybUxheWVyKQoreworICAgIG1fc2hvdWxkU3luY0Zy
YW1lID0gdHJ1ZTsKKyAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiB0b2tlbiA9IGNhbnZhc1BsYXRm
b3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgSW50U2l6ZSBjYW52YXNTaXpl
ID0gY2FudmFzUGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKTsKKyAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVD
YW52YXMoaWQsIGNhbnZhc1NpemUsIHRva2VuKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXll
ciogY2FudmFzUGxhdGZvcm1MYXllcikKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
CisgICAgdWludDMyX3QgZnJvbnRCdWZmZXIgPSBjYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9H
cmFwaGljc1N1cmZhY2UoKTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpTeW5jQ2FudmFzKGlkLCBmcm9udEJ1ZmZlcikpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQgaWQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6RGVzdHJveUNhbnZhcyhpZCkpOwor
fQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdDo6c3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0
cnVlOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBjaGVja0N1c3RvbUZpbHRlclByb2dy
YW1Qcm94aWVzKGZpbHRlcnMpOworI2VuZGlmCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0Q29tcG9zaXRpbmdMYXllckZpbHRl
cnMoaWQsIGZpbHRlcnMpKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICAvLyBXZSBuZWVk
IHRvIGNyZWF0ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMgYmVmb3Jl
IHdlIGdldCB0byBzZXJpYWxpemUgdGhlCisgICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8gdGhlIG90
aGVyIHByb2Nlc3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSBu
ZWVkcworICAgIC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRoYXQgd2Ug
Y2FuIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4KKyAgICAvLyB0aGUgcHJv
Z3JhbSBpcyBub3QgbmVlZGVkIGFueW1vcmUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBzZXJpYWxp
emF0aW9uIHdpbGwgb25seSBoYXBwZW4gYXQgYSBsYXRlciB0aW1lIGluIEFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmVuY29kZS4KKyAgICAvLyBBdCB0aGF0IHBvaW50
IHRoZSBwcm9ncmFtIHdpbGwgb25seSBiZSBzZXJpYWxpemVkIG9uY2UuIEFsbCB0aGUgb3RoZXIg
dGltZXMgaXQgd2lsbCBvbmx5IHVzZSB0aGUgSUQgb2YgdGhlIHByb2dyYW0uCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZp
bHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5hdChpKTsKKyAgICAgICAgaWYgKG9w
ZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVE
X0NVU1RPTSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb25zdCBWYWxpZGF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PGNvbnN0
IFZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIEFT
U0VSVChjdXN0b21PcGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+aXNJbml0aWFsaXplZCgp
KTsKKyAgICAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtQ29tcGlsZWRQcm9ncmFtKiBwcm9ncmFt
ID0gY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnBsYXRmb3JtQ29tcGlsZWRQ
cm9ncmFtKCk7CisKKyAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eT4g
Y3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OworICAgICAgICBpZiAocHJvZ3JhbS0+Y2xpZW50KCkp
CisgICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBzdGF0aWNfY2FzdDxXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQoKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5ID0gV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbVByb3h5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldENsaWVu
dChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFj
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgpKSB7CisgICAgICAgICAgICBjdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHktPnNldENsaWVudCh0aGlzKTsKKyAgICAgICAgICAgIG1fd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNyZWF0ZUN1
c3RvbUZpbHRlclByb2dyYW0oY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LT5pZCgpLCBjdXN0b21P
cGVyYXRpb24tPnZhbGlkYXRlZFByb2dyYW0oKS0+dmFsaWRhdGVkUHJvZ3JhbUluZm8oKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgdGhlIGNsaWVudCB3YXMgbm90IGRp
c2Nvbm5lY3RlZCB0aGVuIHRoaXMgY29vcmRpbmF0b3IgbXVzdCBiZSB0aGUgY2xpZW50IGZvciBp
dC4KKyAgICAgICAgICAgIEFTU0VSVChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHktPmNsaWVudCgp
ID09IHRoaXMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KQoreworICAgIC8vIEF0IHRoaXMg
dGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28gd2UgcmVtb3ZlIGl0IGZy
b20gb3VyIHNldCBhbmQKKyAgICAvLyBzZW5kIGEgbWVzc2FnZSB0byB0aGUgb3RoZXIgcHJvY2Vz
cyB0byBkZWxldGUgaXQuCisgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoY3VzdG9t
RmlsdGVyUHJvZ3JhbVByb3h5KTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6ZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCkKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCBXZWJDb3JlIHdpbGwgbm90IGNhbGwgaW50byB0aGlzIGNvb3JkaW5hdG9yIGFu
eW1vcmUuCisgICAgSGFzaFNldDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPjo6aXRlcmF0
b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaXRl
ciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICgqaXRl
ciktPnNldENsaWVudCgwKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6ZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAg
ICBtX3JlZ2lzdGVyZWRMYXllcnMucmVtb3ZlKGxheWVyKTsKKyAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7CisgICAgbV9kZXRhY2hlZExheWVycy5hcHBlbmQobGF5ZXItPmlkKCkpOworICAg
IHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9t
Vmlld3BvcnRGb3JTZWxmKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKK3sKKyAgICAvLyBUaGVz
ZSBjb25kaXRpb25zIG11c3QgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24uCisgICAgUmVuZGVyTGF5ZXJC
YWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5ZXItPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tp
bmcpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghcmVuZGVyTGF5ZXItPnJlbmRlcmVyKCktPmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpIHx8IHJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlvbigpICE9
IEZpeGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCktPmNvbnRhaW5lcigpLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFyZW5kZXJMYXllci0+aXNTdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoYmFja2luZy0+Z3JhcGhpY3NMYXllcigpKTsKKyAg
ICBncmFwaGljc0xheWVyLT5zZXRGaXhlZFRvVmlld3BvcnQodHJ1ZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHVwZGF0ZU9mZnNldEZyb21WaWV3cG9ydEZvckxheWVyKFJlbmRlckxheWVyKiByZW5kZXJM
YXllcikKK3sKKyAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JTZWxmKHJlbmRlckxheWVy
KTsKKworICAgIGlmIChyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVP
ZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+Zmlyc3RDaGlsZCgpKTsKKyAg
ICBpZiAocmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHVwZGF0ZU9mZnNldEZy
b21WaWV3cG9ydEZvckxheWVyKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnN5bmNGaXhlZExheWVycygpCit7CisgICAgaWYg
KCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25F
bmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpLT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxh
eWVyKCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7CisgICAgaWYgKHJvb3RSZW5kZXJM
YXllci0+Zmlyc3RDaGlsZCgpKQorICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JM
YXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0Ojpsb2NrQW5pbWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb25zTG9j
a2VkID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKHRydWUpKTsKK30KKwordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVubG9ja0FuaW1hdGlvbnMoKQoreworICAgIGlmICgh
bV9hbmltYXRpb25zTG9ja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FuaW1hdGlvbnNM
b2NrZWQgPSBmYWxzZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpTZXRBbmltYXRpb25zTG9ja2VkKGZhbHNlKSk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
Cit7CisgICAgaWYgKG1faXNTdXNwZW5kZWQgfHwgbV93YWl0aW5nRm9yVUlQcm9jZXNzKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBsb2NrIHRoZSBhbmltYXRpb25zIHdoaWxlIHBlcmZv
cm1pbmcgbGF5b3V0LCB0byBhdm9pZCBmbGlja2VycyBjYXVzZWQgYnkgYW5pbWF0aW9ucyBjb250
aW51aW5nIGluIHRoZSBVSSBwcm9jZXNzIHdoaWxlCisgICAgLy8gdGhlIHdlYiBwcm9jZXNzIGxh
eW91dCB3YW50cyB0byBjYW5jZWwgdGhlbS4KKyAgICBsb2NrQW5pbWF0aW9ucygpOworICAgIHN5
bmNEaXNwbGF5U3RhdGUoKTsKKworICAgIC8vIFdlIGNhbiB1bmxvY2sgdGhlIGFuaW1hdGlvbnMg
YmVmb3JlIGZsdXNoaW5nIGlmIHRoZXJlIGFyZSBubyB2aXNpYmxlIGNoYW5nZXMsIGZvciBleGFt
cGxlIGlmIHRoZXJlIGFyZSBjb250ZW50IHVwZGF0ZXMKKyAgICAvLyBpbiBhIGxheWVyIHdpdGgg
b3BhY2l0eSAwLgorICAgIGJvb2wgY2FuVW5sb2NrQmVmb3JlRmx1c2ggPSAhbV9pc1ZhbGlkIHx8
ICF0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPmhhc1BlbmRp
bmdWaXNpYmxlQ2hhbmdlcygpOworICAgIGlmIChjYW5VbmxvY2tCZWZvcmVGbHVzaCkKKyAgICAg
ICAgdW5sb2NrQW5pbWF0aW9ucygpOworCisgICAgaWYgKCFtX2lzVmFsaWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMoKSkKKyAgICAgICAgZGlk
UGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnN5bmNEaXNwbGF5U3RhdGUoKQoreworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRSkgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgYW55IHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFy
ZSBiZWluZyBleGVjdXRlZCBiZWZvcmUgd2UgZmx1c2ggdGhlIGxheWVycy4KKyAgICBtX3dlYlBh
Z2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1h
dGlvbnMoY29udmVydFNlY29uZHNUb0RPTVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7CisjZW5k
aWYKKworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmRpZFBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCkKK3sKKyAg
ICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gpIHsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8RHJhd2luZ0FyZWFJbXBsKj4obV93ZWJQYWdlLT5kcmF3aW5nQXJlYSgpKS0+bGF5ZXJI
b3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgbV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVy
Rmx1c2ggPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjpsYXllckZsdXNoVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+KikK
K3sKKyAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOworfQorCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUGFnZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJU
KCFtX3BhZ2VPdmVybGF5TGF5ZXIpOworCisgICAgbV9wYWdlT3ZlcmxheUxheWVyID0gR3JhcGhp
Y3NMYXllcjo6Y3JlYXRlKHRoaXMsIHRoaXMpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPnNldE5hbWUoIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBwYWdlIG92ZXJs
YXkgY29udGVudCIpOworI2VuZGlmCisKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldERyYXdz
Q29udGVudCh0cnVlKTsKKyAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldFNpemUobV93ZWJQYWdl
LT5zaXplKCkpOworCisgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fcGFnZU92ZXJsYXlMYXll
ci5nZXQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpkZXN0cm95UGFn
ZU92ZXJsYXlMYXllcigpCit7CisgICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7CisgICAg
bV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgbV9wYWdlT3Zlcmxh
eUxheWVyID0gbnVsbHB0cjsKK30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJ
bWFnZSogaW1hZ2UpCit7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEID0g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoaW1h
Z2UpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3Mu
ZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdl
QmFja2luZzsKKyAgICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7CisgICAgICAg
IGltYWdlQmFja2luZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1h
Z2UpOworICAgICAgICBtX2ltYWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGltYWdlQmFja2luZyk7
CisgICAgfSBlbHNlCisgICAgICAgIGltYWdlQmFja2luZyA9IGl0LT52YWx1ZTsKKworICAgIHJl
dHVybiBpbWFnZUJhY2tpbmc7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQorewor
ICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1h
Z2VJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCwgY29uc3QgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9
IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6VXBkYXRlSW1hZ2VCYWNraW5nKGltYWdlSUQsIGhhbmRsZSkpOworfQorCit2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgbV9zaG91bGRTeW5jRnJh
bWUgPSB0cnVlOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OkNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaW1hZ2VJRCkpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1h
Z2VJRCkpOworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBtX2ltYWdlQmFja2lu
Z3MucmVtb3ZlKGltYWdlSUQpOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlJlbW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdJbWFnZUJhY2tp
bmdDaGFuZ2VzKCkKK3sKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faW1h
Z2VCYWNraW5ncy5lbmQoKTsKKyAgICBmb3IgKEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXRl
ciA9IG1faW1hZ2VCYWNraW5ncy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAg
ICBpdGVyLT52YWx1ZS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
LCBkb3VibGUgLyogdGltZSAqLykKK3sKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQ
aGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgaWYgKGdyYXBo
aWNzTGF5ZXIgPT0gbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyKSB7CisgICAgICAgIG1fd2Vi
UGFnZS0+ZHJhd1JlY3QoZ3JhcGhpY3NDb250ZXh0LCBjbGlwUmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX3BhZ2VPdmVybGF5TGF5ZXIp
IHsKKyAgICAgICAgLy8gT3ZlcmxheXMgY29udGFpbiB0cmFuc3BhcmVudCBjb250ZW50cyBhbmQg
d29uJ3QgY2xlYXIgdGhlIGNvbnRleHQgYXMgcGFydCBvZiB0aGVpciByZW5kZXJpbmcsIHNvIHdl
IGRvIGl0IGhlcmUuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3QoY2xpcFJlY3Qp
OworICAgICAgICBtX3dlYlBhZ2UtPmRyYXdQYWdlT3ZlcmxheShncmFwaGljc0NvbnRleHQsIGNs
aXBSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworUGFzc093blB0cjxHcmFwaGlj
c0xheWVyPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllckNsaWVudCogY2xpZW50KQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBuZXcgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNsaWVudCk7CisgICAgbGF5
ZXItPnNldENvb3JkaW5hdG9yKHRoaXMpOworICAgIG1fcmVnaXN0ZXJlZExheWVycy5hZGQobGF5
ZXIpOworICAgIGxheWVyLT5zZXRDb250ZW50c1NjYWxlKG1fY29udGVudHNTY2FsZSk7CisgICAg
bGF5ZXItPmFkanVzdFZpc2libGVSZWN0KCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKGxheWVyKTsK
K30KKworYm9vbCBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmco
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdGlsZVJlY3QpCit7CisgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOworICAgIG1f
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNy
ZWF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1cGRhdGVUaWxlKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAg
ICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVy
SUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3Q6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVp
bnQzMl90IHRpbGVJRCkKK3sKKyAgICBpZiAobV9pc1B1cmdpbmcpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVtb3ZlVGlsZUZvckxheWVyKGxh
eWVySUQsIHRpbGVJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpDcmVhdGVVcGRhdGVBdGxhcyhhdGxhc0lELCBo
YW5kbGUpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7CisgICAgaWYgKG1faXNQdXJnaW5nKQorICAgICAg
ICByZXR1cm47CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6UmVtb3ZlVXBkYXRlQXRsYXMoYXRsYXNJRCkpOworfQorCitXZWJDb3Jl
OjpGbG9hdFJlY3QgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aXNpYmxlQ29udGVudHNSZWN0OworfQorCisKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRp
b25zKQoreworICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKKyAgICBHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyBhY3RpdmVBbmltYXRpb25zID0gYW5pbWF0aW9ucy5nZXRBY3RpdmVBbmltYXRp
b25zKCk7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYWN0aXZlQW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9u
cygpLmF0KGkpLmtleWZyYW1lcygpOworICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkg
IT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOwor
ICAgICAgICAgICAgY2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcygqZmlsdGVyVmFsdWUt
PnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0TGF5ZXJBbmltYXRp
b25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKK30KKwordm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAg
ICBib29sIGNvbnRlbnRzUmVjdERpZENoYW5nZSA9IHJlY3QgIT0gbV92aXNpYmxlQ29udGVudHNS
ZWN0OworICAgIGJvb2wgY29udGVudHNTY2FsZURpZENoYW5nZSA9IHNjYWxlICE9IG1fY29udGVu
dHNTY2FsZTsKKworICAgIC8vIEEgemVybyB0cmFqZWN0b3J5VmVjdG9yIGluZGljYXRlcyB0aGF0
IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IGFyZSByZXF1ZXN0ZWQuCisgICAgdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLmdldCgpKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
KworICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UgfHwgY29udGVudHNTY2FsZURpZENoYW5n
ZSkgeworICAgICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgICAgICBtX2Nv
bnRlbnRzU2NhbGUgPSBzY2FsZTsKKworICAgICAgICBIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBlbmQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuZW5k
KCk7CisgICAgICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIqPjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBpZiAoY29udGVudHNTY2FsZURpZENoYW5nZSkKKyAgICAg
ICAgICAgICAgICAoKml0KS0+c2V0Q29udGVudHNTY2FsZShzY2FsZSk7CisgICAgICAgICAgICBp
ZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQorICAgICAgICAgICAgICAgICgqaXQpLT5hZGp1c3RW
aXNpYmxlUmVjdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7CisgICAgaWYgKG1fd2ViUGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgeworICAgICAgICAvLyBS
b3VuZCB0aGUgcmVjdCBpbnN0ZWFkIG9mIGVuY2xvc2luZyBpdCB0byBtYWtlIHN1cmUgdGhhdCBp
dHMgc2l6ZSBzdGF5cworICAgICAgICAvLyB0aGUgc2FtZSB3aGlsZSBwYW5uaW5nLiBUaGlzIGNh
biBoYXZlIG5hc3R5IGVmZmVjdHMgb24gbGF5b3V0LgorICAgICAgICBtX3dlYlBhZ2UtPnNldEZp
eGVkVmlzaWJsZUNvbnRlbnRSZWN0KHJvdW5kZWRJbnRSZWN0KHJlY3QpKTsKKyAgICB9CisKKyAg
ICBpZiAoY29udGVudHNSZWN0RGlkQ2hhbmdlKQorICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQ
b3NpdGlvblVwZGF0ZSA9IHRydWU7Cit9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkKK3sKKyAgICByZXR1cm4g
dGhpczsKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpzY2hlZHVsZUFuaW1hdGlvbigpCit7CisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6UmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
YW5pbWF0aW9uRnJhbWVSZWFkeSgpCit7CisgICAgc2NoZWR1bGVMYXllckZsdXNoKCk7Cit9Cisj
ZW5kaWYKKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbmRlck5leHRGcmFtZSgp
Cit7CisgICAgbV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7CisgICAgc2NoZWR1bGVMYXll
ckZsdXNoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygp
OworfQorCitib29sIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlVGlsZVVwZGF0
ZXNBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1faXNTdXNwZW5kZWQgJiYgIW1fd2Fp
dGluZ0ZvclVJUHJvY2VzczsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnB1
cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJvb2w+IHB1cmdpbmdU
b2dnbGUobV9pc1B1cmdpbmcsIHRydWUpOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9yZWdpc3RlcmVkTGF5ZXJzLmVu
ZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIq
Pjo6aXRlcmF0b3IgaXQgPSBtX3JlZ2lzdGVyZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICAoKml0KS0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBtX2ltYWdl
QmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3VwZGF0ZUF0bGFzZXMuY2xlYXIoKTsKK30KKworUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6YmVnaW5D
b250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6Rmxh
Z3MgZmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIE93
blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV91cGRhdGVBdGxhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFVwZGF0
ZUF0bGFzKiBhdGxhcyA9IG1fdXBkYXRlQXRsYXNlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGF0
bGFzLT5zdXBwb3J0c0FscGhhKCkgPT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBw
b3J0c0FscGhhKSkgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRo
ZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UuCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQgPSBhdGxhcy0+YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNp
emUsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsg
Ly8gU2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLgorICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQo
YWRvcHRQdHIobmV3IFVwZGF0ZUF0bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZs
YWdzKSkpOworICAgIHNjaGVkdWxlUmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOworICAgIHJldHVy
biBtX3VwZGF0ZUF0bGFzZXMubGFzdCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIo
YXRsYXNJRCwgc2l6ZSwgb2Zmc2V0KTsKK30KKworY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2
ZUF0bGFzZXNUaW1lckludGVydmFsID0gMC41OworCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdDo6c2NoZWR1bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCkKK3sKKyAgICBpZiAoIW1fcmVs
ZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNU
aW1lckludGVydmFsKTsKK30KKwordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnJlbGVh
c2VJbmFjdGl2ZUF0bGFzZXNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dD4qKQoreworICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGtlZXAgb25lIGF0bGFzIGZvciBub24t
Y29tcG9zaXRlZCBjb250ZW50LgorICAgIE93blB0cjxVcGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBB
bnl3YXk7CisgICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQg
PSBmYWxzZTsKKyAgICBmb3IgKGludCBpID0gbV91cGRhdGVBdGxhc2VzLnNpemUoKSAtIDE7ICBp
ID49IDA7IC0taSkgeworICAgICAgICBVcGRhdGVBdGxhcyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFz
ZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYXRsYXMtPmlzSW5Vc2UoKSkKKyAgICAgICAgICAg
IGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2
YWwpOworICAgICAgICBib29sIHVzYWJsZUZvck5vbkNvbXBvc2l0ZWRDb250ZW50ID0gIWF0bGFz
LT5zdXBwb3J0c0FscGhhKCk7CisgICAgICAgIGlmIChhdGxhcy0+aXNJbmFjdGl2ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCAm
JiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQpCisg
ICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkgPSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVs
ZWFzZSgpOworICAgICAgICAgICAgbV91cGRhdGVBdGxhc2VzLnJlbW92ZShpKTsKKyAgICAgICAg
fSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVkQ29udGVudCkKKyAgICAgICAgICAgIGZv
dW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29udGVudCA9IHRydWU7CisgICAgfQorCisg
ICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgJiYgYXRsYXNU
b0tlZXBBbnl3YXkpCisgICAgICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBB
bnl3YXkucmVsZWFzZSgpKTsKKworICAgIGlmIChtX3VwZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEp
CisgICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCit7CisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6U2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM2OGJiNTFlMTdmNGIzODAxOWQ0ZDc4OTZiNjBkZTQ1
MDUzOGVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oCkBAIC0w
LDAgKzEsMjEwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdF9oCisjZGVmaW5lIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdF9oCisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUg
IkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgIldlYkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFVwZGF0ZUluZm87CitjbGFzcyBXZWJQYWdlOworCitjbGFzcyBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsaWVudAorICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAorICAg
ICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgorICAgICwgcHVi
bGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckZhY3RvcnkKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgLCBXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtUHJveHlDbGllbnQKKyNlbmRpZgoreworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKFdlYlBhZ2UqKTsKKyAgICB2aXJ0
dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3QoKTsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29u
dGV4dDsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQo
Ym9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXROb25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50
cyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBzY3JvbGxPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCk7Cisg
ICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3
U2l6ZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7CisgICAgdmlydHVhbCB2b2lk
IHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFnZU92ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7
IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
VGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBwdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNB
bGxvd2VkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwg
Q29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOworCisgICAgdmly
dHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRp
bmF0ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEKSBPVkVSUklERTsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3luY0ZpeGVkTGF5ZXJzKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJ
bnRQb2ludCYpOworCisgICAgLy8gVXBkYXRlQXRsYXNDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCk7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgT1ZFUlJJREU7CisjZW5kaWYKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
T1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QoV2ViUGFnZSopOworCitwcml2YXRlOgorICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVz
aFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0KTsKKworICAgIC8vIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjpDb29yZGluYXRvcgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdlQmFja2lu
Z0NoYW5nZXMoKTsKKworICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CisgICAgdmlydHVhbCBQ
YXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNsaWVudCopIE9WRVJSSURFOworCisgICAgLy8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0CisgICAgdm9pZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJ
Zk5lZWRlZCgpOworICAgIHZvaWQgY3JlYXRlUGFnZU92ZXJsYXlMYXllcigpOworICAgIHZvaWQg
ZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIoKTsKKyAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hh
bmdlcygpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKTsKKyAgICB2b2lkIHBl
cmZvcm1TY2hlZHVsZWRMYXllckZsdXNoKCk7CisgICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVk
TGF5ZXJGbHVzaCgpOworICAgIHZvaWQgc3luY0Rpc3BsYXlTdGF0ZSgpOworICAgIHZvaWQgbG9j
a0FuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHVubG9ja0FuaW1hdGlvbnMoKTsKKworICAgIHZvaWQg
bGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0PiopOworCisgICAgdm9pZCBzY2hlZHVsZVJlbGVhc2VJbmFjdGl2ZUF0bGFzZXMoKTsKKyNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCBhbmltYXRpb25GcmFt
ZVJlYWR5KCk7CisjZW5kaWYKKworICAgIHZvaWQgcmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVy
RmlyZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiopOworCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKQorICAgIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNs
aWVudAorICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdlYkN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eSopOworCisgICAgdm9pZCBjaGVja0N1c3RvbUZpbHRlclByb2dyYW1Q
cm94aWVzKGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2b2lkIGRpc2Nv
bm5lY3RDdXN0b21GaWx0ZXJQcm9ncmFtcygpOworI2VuZGlmCisKKyAgICBPd25QdHI8V2ViQ29y
ZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgd2hpY2gg
Y29udGFpbnMgYWxsIG5vbi1jb21wb3NpdGVkIGNvbnRlbnQuCisgICAgT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllcjsKKworICAgIC8vIFRo
ZSBwYWdlIG92ZXJsYXkgbGF5ZXIuIFdpbGwgYmUgbnVsbCBpZiB0aGVyZSdzIG5vIHBhZ2Ugb3Zl
cmxheS4KKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxh
eWVyOworCisgICAgSGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBt
X3JlZ2lzdGVyZWRMYXllcnM7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9kZXRh
Y2hlZExheWVyczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAg
ICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdzOworICAgIFZlY3RvcjxPd25QdHI8VXBk
YXRlQXRsYXM+ID4gbV91cGRhdGVBdGxhc2VzOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
ICAgIEhhc2hTZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4gbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtczsKKyNlbmRpZgorCisgICAgYm9vbCBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJG
bHVzaDsKKyAgICBib29sIG1faXNWYWxpZDsKKyAgICAvLyBXZSBkb24ndCBzZW5kIHRoZSBtZXNz
YWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gVUkgUHJvY2VzcyBkdXJpbmcg
cHVyZ2luZywgYmVjYXVzZSBVSSBQcm9jZXNzIGFscmVhZHkgaGFkIHJlbW92ZWQgYWxsIHJlc291
cmNlcy4KKyAgICBib29sIG1faXNQdXJnaW5nOworCisgICAgYm9vbCBtX3dhaXRpbmdGb3JVSVBy
b2Nlc3M7CisgICAgYm9vbCBtX2lzU3VzcGVuZGVkOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBt
X3Zpc2libGVDb250ZW50c1JlY3Q7CisgICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOworICAgIGJv
b2wgbV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRhdGU7CisKKyAgICBMYXllclRyZWVDb250
ZXh0IG1fbGF5ZXJUcmVlQ29udGV4dDsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZyYW1lOworICAg
IGJvb2wgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXI7CisgICAgV2ViQ29yZTo6
VGltZXI8Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PiBtX2xheWVyRmx1c2hUaW1lcjsKKyAgICBX
ZWJDb3JlOjpUaW1lcjxDb29yZGluYXRlZExheWVyVHJlZUhvc3Q+IG1fcmVsZWFzZUluYWN0aXZl
QXRsYXNlc1RpbWVyOworICAgIGJvb2wgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQ7Cisg
ICAgdWludDY0X3QgbV9mb3JjZVJlcGFpbnRBc3luY0NhbGxiYWNrSUQ7CisgICAgYm9vbCBtX2Fu
aW1hdGlvbnNMb2NrZWQ7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
MzdiZjY5ZjljZGFlYmNjMmZlYmNhMTg4NWQ0ZGViMTZjOTgwNWI4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzEgQEAKKyMK
KyMgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorIyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisj
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyMKKyMgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisj
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor
IyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisjICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyMgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKworCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IHsKKyAg
ICBTZXRWaXNpYmxlQ29udGVudHNSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVu
dHNSZWN0LCBmbG9hdCBzY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCB0cmFqZWN0b3J5VmVjdG9y
eSkKKyAgICBSZW5kZXJOZXh0RnJhbWUoKQorICAgIFB1cmdlQmFja2luZ1N0b3JlcygpCisjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIEFuaW1hdGlvbkZyYW1lUmVhZHko
KQorI2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZUNvb3JkaW5hdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEx
MTY2ZDIzODQ0NjVkOTczYWJhNTkwOGE3MzA4YWM1YWZiN2JiMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJMYXllclRyZWVDb29y
ZGluYXRvci5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiRHJh
d2luZ0FyZWFJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVBy
b3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVZpZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyQmFja2luZy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJW
aWV3Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hh
bmdlLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUgIlZhbGlkYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbi5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotUGFzc1JlZlB0cjxMYXllclRyZWVDb29yZGluYXRvcj4gTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQotewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGF5ZXJUcmVlQ29vcmRpbmF0b3Iod2ViUGFnZSkpOwotfQotCi1MYXllclRyZWVDb29y
ZGluYXRvcjo6fkxheWVyVHJlZUNvb3JkaW5hdG9yKCkKLXsKLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0gICAgZGlzY29ubmVjdEN1c3RvbUZpbHRlclByb2dyYW1zKCk7Ci0jZW5kaWYKLQotICAg
IC8vIFByZXZlbnQgc2V0Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KDApIC0+IGRldGFj
aExheWVyKCkgZnJvbSBtb2RpZnlpbmcgdGhlIHNldCB3aGlsZSB3ZSBpdGVyYXRlIGl0LgotICAg
IEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gcmVnaXN0ZXJlZExh
eWVyczsKLSAgICByZWdpc3RlcmVkTGF5ZXJzLnN3YXAobV9yZWdpc3RlcmVkTGF5ZXJzKTsKLQot
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9y
IGVuZCA9IHJlZ2lzdGVyZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IHJlZ2lzdGVyZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0Q29vcmRpbmF0
b3IoMCk7Ci19Ci0KLUxheWVyVHJlZUNvb3JkaW5hdG9yOjpMYXllclRyZWVDb29yZGluYXRvcihX
ZWJQYWdlKiB3ZWJQYWdlKQotICAgIDogTGF5ZXJUcmVlSG9zdCh3ZWJQYWdlKQotICAgICwgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2goZmFsc2UpCi0gICAgLCBtX2lzVmFsaWQodHJ1
ZSkKLSAgICAsIG1faXNQdXJnaW5nKGZhbHNlKQotICAgICwgbV93YWl0aW5nRm9yVUlQcm9jZXNz
KHRydWUpCi0gICAgLCBtX2lzU3VzcGVuZGVkKGZhbHNlKQotICAgICwgbV9jb250ZW50c1NjYWxl
KDEpCi0gICAgLCBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSh0cnVlKQotICAgICwg
bV9zaG91bGRTeW5jRnJhbWUoZmFsc2UpCi0gICAgLCBtX2RpZEluaXRpYWxpemVSb290Q29tcG9z
aXRpbmdMYXllcihmYWxzZSkKLSAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZMYXllclRy
ZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCi0gICAgLCBtX3JlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lcih0aGlzLCAmTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXNUaW1lckZpcmVkKQotICAgICwgbV9sYXllckZsdXNoU2NoZWR1bGluZ0VuYWJs
ZWQodHJ1ZSkKLSAgICAsIG1fZm9yY2VSZXBhaW50QXN5bmNDYWxsYmFja0lEKDApCi0gICAgLCBt
X2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCi17Ci0gICAgLy8gQ3JlYXRlIGEgcm9vdCBsYXllci4K
LSAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSAg
ICBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIGNvb3JkaW5hdGVkUm9vdExheWVyID0gdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpOwotICAgIGNvb3JkaW5hdGVk
Um9vdExheWVyLT5zZXRSb290TGF5ZXIodHJ1ZSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIG1fcm9v
dExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRvciByb290IGxheWVyIik7Ci0jZW5k
aWYKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RM
YXllci0+c2V0U2l6ZShtX3dlYlBhZ2UtPnNpemUoKSk7Ci0gICAgbV9sYXllclRyZWVDb250ZXh0
LmNvb3JkaW5hdGVkTGF5ZXJJRCA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNvb3JkaW5h
dGVkUm9vdExheWVyKS0+aWQoKTsKLQotICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzLCB0aGlzKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
bV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROYW1lKCJMYXllclRyZWVDb29yZGluYXRv
ciBub24tY29tcG9zaXRlZCBjb250ZW50Iik7Ci0jZW5kaWYKLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXItPnNldFNpemUobV93ZWJQYWdlLT5zaXplKCkpOwotCi0gICAgbV9yb290TGF5
ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci5nZXQoKSk7Ci0KLSAgICBp
ZiAobV93ZWJQYWdlLT5oYXNQYWdlT3ZlcmxheSgpKQotICAgICAgICBjcmVhdGVQYWdlT3Zlcmxh
eUxheWVyKCk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKGJvb2wgbGF5ZXJG
bHVzaGluZ0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVk
ID09IGxheWVyRmx1c2hpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheWVy
Rmx1c2hTY2hlZHVsaW5nRW5hYmxlZCA9IGxheWVyRmx1c2hpbmdFbmFibGVkOwotCi0gICAgaWYg
KG1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKSB7Ci0gICAgICAgIHNjaGVkdWxlTGF5ZXJG
bHVzaCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2FuY2VsUGVuZGluZ0xheWVy
Rmx1c2goKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2NoZWR1bGVMYXllckZs
dXNoKCkKLXsKLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFNjaGVkdWxpbmdFbmFibGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCi0gICAg
ICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6Y2FuY2VsUGVuZGluZ0xheWVyRmx1c2goKQotewotICAgIG1fbGF5ZXJG
bHVzaFRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0U2hv
dWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChib29sIG5vdGlmeUFmdGVyU2No
ZWR1bGVkTGF5ZXJGbHVzaCkKLXsKLSAgICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVz
aCA9IG5vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaDsKLX0KLQotdm9pZCBMYXllclRyZWVD
b29yZGluYXRvcjo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPnJl
bW92ZUFsbENoaWxkcmVuKCk7Ci0gICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXRD
b250ZW50c09wYXF1ZShtX3dlYlBhZ2UtPmRyYXdzQmFja2dyb3VuZCgpICYmICFtX3dlYlBhZ2Ut
PmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpOwotCi0gICAgLy8gQWRkIHRoZSBhY2NlbGVy
YXRlZCBsYXllciB0cmVlIGhpZXJhcmNoeS4KLSAgICBpZiAoZ3JhcGhpY3NMYXllcikKLSAgICAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5hZGRDaGlsZChncmFwaGljc0xheWVyKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6aW52YWxpZGF0ZSgpCi17Ci0gICAgY2Fu
Y2VsUGVuZGluZ0xheWVyRmx1c2goKTsKLQotICAgIEFTU0VSVChtX2lzVmFsaWQpOwotICAgIG1f
cm9vdExheWVyID0gbnVsbHB0cjsKLSAgICBtX2lzVmFsaWQgPSBmYWxzZTsKLX0KLQotdm9pZCBM
YXllclRyZWVDb29yZGluYXRvcjo6c2V0Tm9uQ29tcG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXko
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50TGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICBpZiAobV9wYWdlT3Zl
cmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVybGF5TGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKLQotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpzY3JvbGxOb25Db21wb3NpdGVkQ29udGVudHMoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgLyogc2Nyb2xs
T2Zmc2V0ICovKQotewotICAgIHNldE5vbkNvbXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KHNj
cm9sbFJlY3QpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpmb3JjZVJlcGFpbnQo
KQotewotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxheW91dCB0ZXN0cy4g
U2luY2UgaW4gdGhpcyBjYXNlIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYSBVSVByb2Nlc3MgdG8g
cmVwbHkgbmljZWx5LgotICAgIC8vIEluc3RlYWQgd2UgYXJlIGp1c3QgdHJpZ2dlcmluZyBmb3Jj
ZVJlcGFpbnQuIEJ1dCB3ZSBzdGlsbCB3YW50IHRvIGhhdmUgdGhlIHNjcmlwdGVkIGFuaW1hdGlv
biBjYWxsYmFja3MgYmVpbmcgZXhlY3V0ZWQuCi0gICAgc3luY0Rpc3BsYXlTdGF0ZSgpOwotCi0g
ICAgLy8gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIGZsdXNoLCBvdGhlcndpc2UgdGhlIGZv
cmNlZCBwYWludCBtaWdodCBjYW5jZWwgYSBsYXRlciBleHBlY3RlZCBmbHVzaC4KLSAgICAvLyBU
aGlzIGlzIGFsaWduZWQgd2l0aCBMYXllclRyZWVIb3N0Q0EuCi0gICAgc2NoZWR1bGVMYXllckZs
dXNoKCk7Ci0gICAgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCk7Ci19Ci0KLWJvb2wgTGF5ZXJU
cmVlQ29vcmRpbmF0b3I6OmZvcmNlUmVwYWludEFzeW5jKHVpbnQ2NF90IGNhbGxiYWNrSUQpCi17
Ci0gICAgLy8gV2UgZXhwZWN0IHRoZSBVSSBwcm9jZXNzIHRvIG5vdCByZXF1aXJlIGEgbmV3IHJl
cGFpbnQgdW50aWwgdGhlIHByZXZpb3VzIG9uZSBoYXMgZmluaXNoZWQuCi0gICAgQVNTRVJUKCFt
X2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCk7Ci0gICAgbV9mb3JjZVJlcGFpbnRBc3luY0Nh
bGxiYWNrSUQgPSBjYWxsYmFja0lEOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzaXplRGlkQ2hhbmdl
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIG5ld1NpemUpCi17Ci0gICAgaWYgKG1fcm9vdExheWVy
LT5zaXplKCkgPT0gbmV3U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXIt
PnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICAvLyBJZiB0aGUgbmV3U2l6ZSBleHBvc2VzIG5ldyBh
cmVhcyBvZiB0aGUgbm9uLWNvbXBvc2l0ZWQgY29udGVudCBhIHNldE5lZWRzRGlzcGxheSBpcyBu
ZWVkZWQKLSAgICAvLyBmb3IgdGhvc2UgbmV3bHkgZXhwb3NlZCBhcmVhcy4KLSAgICBGbG9hdFNp
emUgb2xkU2l6ZSA9IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2l6ZSgpOwotICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRMYXllci0+c2V0U2l6ZShuZXdTaXplKTsKLQotICAgIGlmIChu
ZXdTaXplLndpZHRoKCkgPiBvbGRTaXplLndpZHRoKCkpIHsKLSAgICAgICAgZmxvYXQgaGVpZ2h0
ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5ld1NpemUuaGVpZ2h0KCkpLCBvbGRTaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudExheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KG9sZFNpemUud2lkdGgoKSwgMCwgbmV3U2l6ZS53aWR0
aCgpIC0gb2xkU2l6ZS53aWR0aCgpLCBoZWlnaHQpKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3U2l6
ZS5oZWlnaHQoKSA+IG9sZFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdCgwLCBvbGRTaXplLmhl
aWdodCgpLCBuZXdTaXplLndpZHRoKCksIG5ld1NpemUuaGVpZ2h0KCkgLSBvbGRTaXplLmhlaWdo
dCgpKSk7Ci0KLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXItPnNldFNpemUobmV3U2l6ZSk7Ci0KLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsK
LX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCkK
LXsKLSAgICBjcmVhdGVQYWdlT3ZlcmxheUxheWVyKCk7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNo
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRpZFVuaW5zdGFsbFBhZ2VPdmVy
bGF5KCkKLXsKLSAgICBkZXN0cm95UGFnZU92ZXJsYXlMYXllcigpOwotICAgIHNjaGVkdWxlTGF5
ZXJGbHVzaCgpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3Zlcmxh
eU5lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIEFTU0VS
VChtX3BhZ2VPdmVybGF5TGF5ZXIpOwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOwotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpzZXRQYWdlT3ZlcmxheU9wYWNpdHkoZmxvYXQgdmFsdWUp
Ci17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXllcik7Ci0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXRPcGFjaXR5KHZhbHVlKTsKLSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQot
Ym9vbCBMYXllclRyZWVDb29yZGluYXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkKLXsK
LSAgICBpZiAobV93YWl0aW5nRm9yVUlQcm9jZXNzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotCi0gICAgbV9y
b290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLSAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKLSAgICBpZiAobV9wYWdlT3ZlcmxheUxheWVyKQotICAgICAgICBtX3BhZ2VP
dmVybGF5TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQot
ICAgIGJvb2wgZGlkU3luYyA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZp
ZXcoKS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0KLSAgICBm
bHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZGV0YWNoZWRMYXllcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVsZXRlQ29tcG9zaXRp
bmdMYXllcihtX2RldGFjaGVkTGF5ZXJzW2ldKSk7Ci0gICAgbV9kZXRhY2hlZExheWVycy5jbGVh
cigpOwotCi0gICAgaWYgKG1fc2hvdWxkU3luY0ZyYW1lKSB7Ci0gICAgICAgIGRpZFN5bmMgPSB0
cnVlOwotCi0gICAgICAgIEludFNpemUgY29udGVudHNTaXplID0gcm91bmRlZEludFNpemUobV9u
b25Db21wb3NpdGVkQ29udGVudExheWVyLT5zaXplKCkpOwotICAgICAgICBJbnRSZWN0IGNvdmVy
ZWRSZWN0ID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9ub25Db21wb3NpdGVkQ29udGVu
dExheWVyLmdldCgpKS0+Y292ZXJSZWN0KCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGlkUmVuZGVyRnJhbWUoY29udGVudHNT
aXplLCBjb3ZlcmVkUmVjdCkpOwotICAgICAgICBtX3dhaXRpbmdGb3JVSVByb2Nlc3MgPSB0cnVl
OwotICAgICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IGZhbHNlOwotICAgIH0gZWxzZQotICAgICAg
ICB1bmxvY2tBbmltYXRpb25zKCk7Ci0KLSAgICBpZiAobV9mb3JjZVJlcGFpbnRBc3luY0NhbGxi
YWNrSUQpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlZvaWRDYWxsYmFjayhtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCkpOwotICAgICAgICBt
X2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJRCA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRp
ZFN5bmM7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmluaXRpYWxpemVSb290Q29t
cG9zaXRpbmdMYXllcklmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9kaWRJbml0aWFsaXplUm9vdENv
bXBvc2l0aW5nTGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6U2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5pZCgpKSk7
Ci0gICAgbV9kaWRJbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXIgPSB0cnVlOwotICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExh
eWVySW5mbyYgaW5mbykKLXsKLSAgICBpZiAobV9zaG91bGRTZW5kU2Nyb2xsUG9zaXRpb25VcGRh
dGUpIHsKLSAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpEaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3Qu
bG9jYXRpb24oKSkpOwotICAgICAgICBtX3Nob3VsZFNlbmRTY3JvbGxQb3NpdGlvblVwZGF0ZSA9
IGZhbHNlOwotICAgIH0KLQotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShpZCwgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5h
dG9yOjpzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFt
ZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpTZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oaWQsIGNoaWxkcmVuKSk7Ci19
Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6
OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIFBsYXRmb3JtTGF5ZXIqIGNhbnZh
c1BsYXRmb3JtTGF5ZXIpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIEdy
YXBoaWNzU3VyZmFjZVRva2VuIHRva2VuID0gY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NT
dXJmYWNlVG9rZW4oKTsKLSAgICBJbnRTaXplIGNhbnZhc1NpemUgPSBjYW52YXNQbGF0Zm9ybUxh
eWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q3JlYXRlQ2FudmFzKGlkLCBjYW52YXNTaXplLCB0
b2tlbikpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgUGxhdGZvcm1MYXllciogY2FudmFzUGxhdGZvcm1MYXllcikKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgdWludDMyX3QgZnJvbnRCdWZmZXIg
PSBjYW52YXNQbGF0Zm9ybUxheWVyLT5jb3B5VG9HcmFwaGljc1N1cmZhY2UoKTsKLSAgICBtX3dl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlN5bmNDYW52
YXMoaWQsIGZyb250QnVmZmVyKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmRl
c3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIGlmIChtX2lzUHVyZ2lu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6RGVz
dHJveUNhbnZhcyhpZCkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNoZWNrQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3hpZXMoZmlsdGVycyk7Ci0jZW5kaWYKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldENvbXBvc2l0aW5n
TGF5ZXJGaWx0ZXJzKGlkLCBmaWx0ZXJzKSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNoZWNrQ3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3hpZXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5IG9iamVjdHMg
YmVmb3JlIHdlIGdldCB0byBzZXJpYWxpemUgdGhlCi0gICAgLy8gY3VzdG9tIGZpbHRlcnMgdG8g
dGhlIG90aGVyIHByb2Nlc3MuIFRoYXQncyBiZWNhdXNlIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eSBuZWVkcwotICAgIC8vIHRvIGxpbmsgYmFjayB0byB0aGUgY29vcmRpbmF0b3IsIHNvIHRo
YXQgd2UgY2FuIHNlbmQgYSBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzIHdoZW4gCi0gICAgLy8g
dGhlIHByb2dyYW0gaXMgbm90IG5lZWRlZCBhbnltb3JlLgotICAgIC8vIE5vdGUgdGhhdCB0aGUg
c2VyaWFsaXphdGlvbiB3aWxsIG9ubHkgaGFwcGVuIGF0IGEgbGF0ZXIgdGltZSBpbiBBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjplbmNvZGUuCi0gICAgLy8gQXQgdGhh
dCBwb2ludCB0aGUgcHJvZ3JhbSB3aWxsIG9ubHkgYmUgc2VyaWFsaXplZCBvbmNlLiBBbGwgdGhl
IG90aGVyIHRpbWVzIGl0IHdpbGwgb25seSB1c2UgdGhlIElEIG9mIHRoZSBwcm9ncmFtLgotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMuYXQoaSk7Ci0gICAgICAg
IGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OlZB
TElEQVRFRF9DVVNUT00pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgVmFs
aWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBzdGF0aWNfY2Fz
dDxjb25zdCBWYWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAg
ICAgICBBU1NFUlQoY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPmlzSW5pdGlh
bGl6ZWQoKSk7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJvZ3JhbSog
cHJvZ3JhbSA9IGN1c3RvbU9wZXJhdGlvbi0+dmFsaWRhdGVkUHJvZ3JhbSgpLT5wbGF0Zm9ybUNv
bXBpbGVkUHJvZ3JhbSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPFdlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eT4gY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OwotICAgICAgICBpZiAocHJv
Z3JhbS0+Y2xpZW50KCkpCi0gICAgICAgICAgICBjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkgPSBz
dGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqPihwcm9ncmFtLT5jbGllbnQo
KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5
ID0gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBy
b2dyYW0tPnNldENsaWVudChjdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoIWN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+Y2xpZW50KCkp
IHsKLSAgICAgICAgICAgIGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+c2V0Q2xpZW50KHRoaXMp
OwotICAgICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGlu
YXRvclByb3h5OjpDcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Q
cm94eS0+aWQoKSwgY3VzdG9tT3BlcmF0aW9uLT52YWxpZGF0ZWRQcm9ncmFtKCktPnZhbGlkYXRl
ZFByb2dyYW1JbmZvKCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIElmIHRo
ZSBjbGllbnQgd2FzIG5vdCBkaXNjb25uZWN0ZWQgdGhlbiB0aGlzIGNvb3JkaW5hdG9yIG11c3Qg
YmUgdGhlIGNsaWVudCBmb3IgaXQuCi0gICAgICAgICAgICBBU1NFUlQoY3VzdG9tRmlsdGVyUHJv
Z3JhbVByb3h5LT5jbGllbnQoKSA9PSB0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KFdl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSogY3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5KQotewot
ICAgIC8vIEF0IHRoaXMgdGltZSB0aGUgc2hhZGVyIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgc28g
d2UgcmVtb3ZlIGl0IGZyb20gb3VyIHNldCBhbmQgCi0gICAgLy8gc2VuZCBhIG1lc3NhZ2UgdG8g
dGhlIG90aGVyIHByb2Nlc3MgdG8gZGVsZXRlIGl0LgotICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXMucmVtb3ZlKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSk7Ci0gICAgbV93ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZW1vdmVDdXN0b21GaWx0ZXJQ
cm9ncmFtKGN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS0+aWQoKSkpOwotfQotCi12b2lkIExheWVy
VHJlZUNvb3JkaW5hdG9yOjpkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKQotewotICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IFdlYkNvcmUgd2lsbCBub3QgY2FsbCBpbnRvIHRoaXMgY29vcmRp
bmF0b3IgYW55bW9yZS4KLSAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+
OjppdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5iZWdpbigpOwotICAgIGZv
ciAoOyBpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCk7ICsraXRlcikKLSAgICAg
ICAgKCppdGVyKS0+c2V0Q2xpZW50KDApOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OmRldGFjaExheWVyKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbGF5ZXIpCi17
Ci0gICAgbV9yZWdpc3RlcmVkTGF5ZXJzLnJlbW92ZShsYXllcik7Ci0gICAgbV9zaG91bGRTeW5j
RnJhbWUgPSB0cnVlOwotICAgIG1fZGV0YWNoZWRMYXllcnMuYXBwZW5kKGxheWVyLT5pZCgpKTsK
LSAgICBzY2hlZHVsZUxheWVyRmx1c2goKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlT2Zmc2V0
RnJvbVZpZXdwb3J0Rm9yU2VsZihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCi17Ci0gICAgLy8g
VGhlc2UgY29uZGl0aW9ucyBtdXN0IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uLgotICAgIFJlbmRlckxh
eWVyQmFja2luZyogYmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFi
YWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5k
ZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxheWVyLT5yZW5kZXJlcigpLT5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSB8fCByZW5kZXJMYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cG9zaXRpb24o
KSAhPSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckxh
eWVyLT5yZW5kZXJlcigpLT5jb250YWluZXIoKS0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghcmVuZGVyTGF5ZXItPmlzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKSk7
Ci0gICAgZ3JhcGhpY3NMYXllci0+c2V0Rml4ZWRUb1ZpZXdwb3J0KHRydWUpOwotfQotCi1zdGF0
aWMgdm9pZCB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JMYXllcihSZW5kZXJMYXllciogcmVu
ZGVyTGF5ZXIpCi17Ci0gICAgdXBkYXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yU2VsZihyZW5kZXJM
YXllcik7Ci0KLSAgICBpZiAocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgdXBk
YXRlT2Zmc2V0RnJvbVZpZXdwb3J0Rm9yTGF5ZXIocmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7
Ci0gICAgaWYgKHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAgICAgICB1cGRhdGVPZmZz
ZXRGcm9tVmlld3BvcnRGb3JMYXllcihyZW5kZXJMYXllci0+bmV4dFNpYmxpbmcoKSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNGaXhlZExheWVycygpCi17Ci0gICAgaWYg
KCFtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkgfHwgIW1fd2ViUGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25F
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV93ZWJQYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpLT5oYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZW5kZXJMYXllciogcm9vdFJlbmRlckxheWVyID0gbV93ZWJQYWdlLT5t
YWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKS0+cm9vdFJlbmRlckxh
eWVyKCk7Ci0gICAgQVNTRVJUKHJvb3RSZW5kZXJMYXllcik7Ci0gICAgaWYgKHJvb3RSZW5kZXJM
YXllci0+Zmlyc3RDaGlsZCgpKQotICAgICAgICB1cGRhdGVPZmZzZXRGcm9tVmlld3BvcnRGb3JM
YXllcihyb290UmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OmxvY2tBbmltYXRpb25zKCkKLXsKLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQg
PSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0
b3JQcm94eTo6U2V0QW5pbWF0aW9uc0xvY2tlZCh0cnVlKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
Q29vcmRpbmF0b3I6OnVubG9ja0FuaW1hdGlvbnMoKQotewotICAgIGlmICghbV9hbmltYXRpb25z
TG9ja2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBmYWxz
ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJv
eHk6OlNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6cGVyZm9ybVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX2lzU3Vz
cGVuZGVkIHx8IG1fd2FpdGluZ0ZvclVJUHJvY2VzcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gV2UgbG9jayB0aGUgYW5pbWF0aW9ucyB3aGlsZSBwZXJmb3JtaW5nIGxheW91dCwgdG8gYXZv
aWQgZmxpY2tlcnMgY2F1c2VkIGJ5IGFuaW1hdGlvbnMgY29udGludWluZyBpbiB0aGUgVUkgcHJv
Y2VzcyB3aGlsZQotICAgIC8vIHRoZSB3ZWIgcHJvY2VzcyBsYXlvdXQgd2FudHMgdG8gY2FuY2Vs
IHRoZW0uCi0gICAgbG9ja0FuaW1hdGlvbnMoKTsKLSAgICBzeW5jRGlzcGxheVN0YXRlKCk7Ci0K
LSAgICAvLyBXZSBjYW4gdW5sb2NrIHRoZSBhbmltYXRpb25zIGJlZm9yZSBmbHVzaGluZyBpZiB0
aGVyZSBhcmUgbm8gdmlzaWJsZSBjaGFuZ2VzLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUgY29u
dGVudCB1cGRhdGVzCi0gICAgLy8gaW4gYSBsYXllciB3aXRoIG9wYWNpdHkgMC4KLSAgICBib29s
IGNhblVubG9ja0JlZm9yZUZsdXNoID0gIW1faXNWYWxpZCB8fCAhdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKTsK
LSAgICBpZiAoY2FuVW5sb2NrQmVmb3JlRmx1c2gpCi0gICAgICAgIHVubG9ja0FuaW1hdGlvbnMo
KTsKLQotICAgIGlmICghbV9pc1ZhbGlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZmx1
c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKCkpCi0gICAgICAgIGRpZFBlcmZvcm1TY2hlZHVsZWRMYXll
ckZsdXNoKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnN5bmNEaXNwbGF5U3Rh
dGUoKQotewotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJiYgIVVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikgJiYgIVVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RV9ESVNQTEFZX01PTklUT1IpCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHByZXZpb3VzbHkg
cmVnaXN0ZXJlZCBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBiZWluZyBleGVjdXRlZCBiZWZvcmUg
d2UgZmx1c2ggdGhlIGxheWVycy4KLSAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFt
ZSgpLT52aWV3KCktPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNlY29uZHNUb0RP
TVRpbWVTdGFtcChjdXJyZW50VGltZSgpKSk7Ci0jZW5kaWYKLQotICAgIG1fd2ViUGFnZS0+bGF5
b3V0SWZOZWVkZWQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6ZGlkUGVyZm9y
bVNjaGVkdWxlZExheWVyRmx1c2goKQotewotICAgIGlmIChtX25vdGlmeUFmdGVyU2NoZWR1bGVk
TGF5ZXJGbHVzaCkgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dl
YlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOwotICAgICAg
ICBtX25vdGlmeUFmdGVyU2NoZWR1bGVkTGF5ZXJGbHVzaCA9IGZhbHNlOwotICAgIH0KLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoVGltZXI8TGF5
ZXJUcmVlQ29vcmRpbmF0b3I+KikKLXsKLSAgICBwZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgp
OwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVQYWdlT3ZlcmxheUxheWVy
KCkKLXsKLSAgICBBU1NFUlQoIW1fcGFnZU92ZXJsYXlMYXllcik7Ci0KLSAgICBtX3BhZ2VPdmVy
bGF5TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUodGhpcywgdGhpcyk7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIG1fcGFnZU92ZXJsYXlMYXllci0+c2V0TmFtZSgiTGF5ZXJUcmVlQ29vcmRpbmF0
b3IgcGFnZSBvdmVybGF5IGNvbnRlbnQiKTsKLSNlbmRpZgotCi0gICAgbV9wYWdlT3ZlcmxheUxh
eWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5zZXRT
aXplKG1fd2ViUGFnZS0+c2l6ZSgpKTsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChtX3Bh
Z2VPdmVybGF5TGF5ZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpk
ZXN0cm95UGFnZU92ZXJsYXlMYXllcigpCi17Ci0gICAgQVNTRVJUKG1fcGFnZU92ZXJsYXlMYXll
cik7Ci0gICAgbV9wYWdlT3ZlcmxheUxheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgbV9w
YWdlT3ZlcmxheUxheWVyID0gbnVsbHB0cjsKLX0KLQotUGFzc1JlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVl
ZGVkKEltYWdlKiBpbWFnZSkKLXsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdl
SUQgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RChpbWFnZSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNr
aW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
aW1hZ2VCYWNraW5nOwotICAgIGlmIChpdCA9PSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpIHsKLSAg
ICAgICAgaW1hZ2VCYWNraW5nID0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZSh0aGlz
LCBpbWFnZSk7Ci0gICAgICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgaW1hZ2VCYWNr
aW5nKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2VCYWNraW5nID0gaXQtPnZhbHVlOwotCi0g
ICAgcmV0dXJuIGltYWdlQmFja2luZzsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6
Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsK
LSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7Ci0gICAgbV93ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpDcmVhdGVJbWFnZUJhY2tpbmcoaW1hZ2VJ
RCkpOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjp1cGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBXZWJDb29yZGluYXRlZFN1
cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQotewotICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
LSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6
OlVwZGF0ZUltYWdlQmFja2luZyhpbWFnZUlELCBoYW5kbGUpKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVDb29yZGluYXRvcjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6Q2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29v
cmRpbmF0b3I6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCi17Ci0gICAgaWYgKG1faXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBtX3Nob3VsZFN5
bmNGcmFtZSA9IHRydWU7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLnJlbW92ZShpbWFnZUlEKTsKLSAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlJl
bW92ZUltYWdlQmFja2luZyhpbWFnZUlEKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OmZsdXNoUGVuZGluZ0ltYWdlQmFja2luZ0NoYW5nZXMoKQotewotICAgIEltYWdlQmFja2lu
Z01hcDo6aXRlcmF0b3IgZW5kID0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpOwotICAgIGZvciAoSW1h
Z2VCYWNraW5nTWFwOjppdGVyYXRvciBpdGVyID0gbV9pbWFnZUJhY2tpbmdzLmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnZhbHVlLT51cGRhdGUoKTsKLX0KLQot
dm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIC8qIHRpbWUgKi8pCi17Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlQ29vcmRpbmF0b3I6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopCi17Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnBhaW50
Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkKLXsK
LSAgICBpZiAoZ3JhcGhpY3NMYXllciA9PSBtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5ZXIpIHsK
LSAgICAgICAgbV93ZWJQYWdlLT5kcmF3UmVjdChncmFwaGljc0NvbnRleHQsIGNsaXBSZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChncmFwaGljc0xheWVyID09IG1fcGFn
ZU92ZXJsYXlMYXllcikgewotICAgICAgICAvLyBPdmVybGF5cyBjb250YWluIHRyYW5zcGFyZW50
IGNvbnRlbnRzIGFuZCB3b24ndCBjbGVhciB0aGUgY29udGV4dCBhcyBwYXJ0IG9mIHRoZWlyIHJl
bmRlcmluZywgc28gd2UgZG8gaXQgaGVyZS4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFy
UmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIG1fd2ViUGFnZS0+ZHJhd1BhZ2VPdmVybGF5KGdyYXBo
aWNzQ29udGV4dCwgY2xpcFJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi1QYXNz
T3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGVHcmFwaGlj
c0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbmV3IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjbGllbnQp
OwotICAgIGxheWVyLT5zZXRDb29yZGluYXRvcih0aGlzKTsKLSAgICBtX3JlZ2lzdGVyZWRMYXll
cnMuYWRkKGxheWVyKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2NvbnRlbnRzU2Nh
bGUpOwotICAgIGxheWVyLT5hZGp1c3RWaXNpYmxlUmVjdCgpOwotICAgIHJldHVybiBhZG9wdFB0
cihsYXllcik7Ci19Ci0KLWJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29y
ZGluYXRvcjo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8p
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6dXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5m
byYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAg
bV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwotICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6VXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGlu
YXRvcjo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlEKQotewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hv
dWxkU3luY0ZyYW1lID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUNvb3JkaW5hdG9yUHJveHk6OlJlbW92ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6Y3JlYXRlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmIGhhbmRs
ZSkKLXsKLSAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9y
UHJveHk6OkNyZWF0ZVVwZGF0ZUF0bGFzKGF0bGFzSUQsIGhhbmRsZSkpOwotfQotCi12b2lkIExh
eWVyVHJlZUNvb3JkaW5hdG9yOjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQot
ewotICAgIGlmIChtX2lzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6UmVtb3ZlVXBkYXRlQXRs
YXMoYXRsYXNJRCkpOwotfQotCi1XZWJDb3JlOjpGbG9hdFJlY3QgTGF5ZXJUcmVlQ29vcmRpbmF0
b3I6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Zpc2libGVD
b250ZW50c1JlY3Q7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCBjb25zdCBHcmFwaGljc0xheWVy
QW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7
Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgYWN0aXZlQW5pbWF0aW9ucyA9IGFuaW1hdGlv
bnMuZ2V0QWN0aXZlQW5pbWF0aW9ucygpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFjdGl2ZUFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBh
bmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtl
eWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFt
ZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVl
KiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4o
a2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGNoZWNrQ3VzdG9tRmlsdGVyUHJvZ3JhbVBy
b3hpZXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgot
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eTo6
U2V0TGF5ZXJBbmltYXRpb25zKGxheWVySUQsIGFjdGl2ZUFuaW1hdGlvbnMpKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVj
dG9yKQotewotICAgIGJvb2wgY29udGVudHNSZWN0RGlkQ2hhbmdlID0gcmVjdCAhPSBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7Ci0gICAgYm9vbCBjb250ZW50c1NjYWxlRGlkQ2hhbmdlID0gc2NhbGUg
IT0gbV9jb250ZW50c1NjYWxlOwotCi0gICAgLy8gQSB6ZXJvIHRyYWplY3RvcnlWZWN0b3IgaW5k
aWNhdGVzIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgYXJlIHJlcXVlc3RlZC4K
LSAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtX25vbkNvbXBvc2l0ZWRDb250ZW50TGF5
ZXIuZ2V0KCkpLT5zZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3Rv
cnlWZWN0b3IpOwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdERpZENoYW5nZSB8fCBjb250ZW50c1Nj
YWxlRGlkQ2hhbmdlKSB7Ci0gICAgICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0g
ICAgICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotCi0gICAgICAgIEhhc2hTZXQ8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJl
ZExheWVycy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcio+OjppdGVyYXRvciBpdCA9IG1fcmVnaXN0ZXJlZExheWVycy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChjb250ZW50c1NjYWxlRGlkQ2hh
bmdlKQotICAgICAgICAgICAgICAgICgqaXQpLT5zZXRDb250ZW50c1NjYWxlKHNjYWxlKTsKLSAg
ICAgICAgICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgICAgICAgICAgKCpp
dCktPmFkanVzdFZpc2libGVSZWN0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzY2hlZHVs
ZUxheWVyRmx1c2goKTsKLSAgICBpZiAobV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKSB7Ci0g
ICAgICAgIC8vIFJvdW5kIHRoZSByZWN0IGluc3RlYWQgb2YgZW5jbG9zaW5nIGl0IHRvIG1ha2Ug
c3VyZSB0aGF0IGl0cyBzaXplIHN0YXlzCi0gICAgICAgIC8vIHRoZSBzYW1lIHdoaWxlIHBhbm5p
bmcuIFRoaXMgY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBvbiBsYXlvdXQuCi0gICAgICAgIG1fd2Vi
UGFnZS0+c2V0Rml4ZWRWaXNpYmxlQ29udGVudFJlY3Qocm91bmRlZEludFJlY3QocmVjdCkpOwot
ICAgIH0KLQotICAgIGlmIChjb250ZW50c1JlY3REaWRDaGFuZ2UpCi0gICAgICAgIG1fc2hvdWxk
U2VuZFNjcm9sbFBvc2l0aW9uVXBkYXRlID0gdHJ1ZTsKLX0KLQotR3JhcGhpY3NMYXllckZhY3Rv
cnkqIExheWVyVHJlZUNvb3JkaW5hdG9yOjpncmFwaGljc0xheWVyRmFjdG9yeSgpCi17Ci0gICAg
cmV0dXJuIHRoaXM7Ci19Ci0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12
b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZUFuaW1hdGlvbigpCi17Ci0gICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVDb29yZGluYXRvclByb3h5OjpSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFuaW1h
dGlvbkZyYW1lUmVhZHkoKQotewotICAgIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotfQotI2VuZGlm
Ci0KLXZvaWQgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAg
bV93YWl0aW5nRm9yVUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgc2NoZWR1bGVMYXllckZsdXNoKCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdXBkYXRlQXRsYXNlcy5zaXplKCk7ICsr
aSkKLSAgICAgICAgbV91cGRhdGVBdGxhc2VzW2ldLT5kaWRTd2FwQnVmZmVycygpOwotfQotCi1i
b29sIExheWVyVHJlZUNvb3JkaW5hdG9yOjpsYXllclRyZWVUaWxlVXBkYXRlc0FsbG93ZWQoKSBj
b25zdAotewotICAgIHJldHVybiAhbV9pc1N1c3BlbmRlZCAmJiAhbV93YWl0aW5nRm9yVUlQcm9j
ZXNzOwotfQotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpwdXJnZUJhY2tpbmdTdG9yZXMo
KQotewotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBwdXJnaW5nVG9nZ2xlKG1faXNQdXJnaW5n
LCB0cnVlKTsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcmVnaXN0ZXJlZExheWVycy5lbmQoKTsKLSAgICBmb3IgKEhh
c2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj46Oml0ZXJhdG9yIGl0ID0g
bV9yZWdpc3RlcmVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotCi0gICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7
Ci0gICAgbV91cGRhdGVBdGxhc2VzLmNsZWFyKCk7Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhpY3ND
b250ZXh0PiBMYXllclRyZWVDb29yZGluYXRvcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IElu
dFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MsIHVpbnQzMl90JiBh
dGxhc0lELCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IGdyYXBoaWNzQ29udGV4dDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV91cGRhdGVB
dGxhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFVwZGF0ZUF0bGFzKiBhdGxhcyA9IG1fdXBk
YXRlQXRsYXNlc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGF0bGFzLT5zdXBwb3J0c0FscGhhKCkg
PT0gKGZsYWdzICYgQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhKSkgewotICAgICAg
ICAgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBi
dWZmZXIgc3BhY2UuCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQgPSBhdGxhcy0+YmVnaW5Q
YWludGluZ09uQXZhaWxhYmxlQnVmZmVyKGF0bGFzSUQsIHNpemUsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICAgICAgICAgIHJldHVybiBncmFwaGlj
c0NvbnRleHQucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0
IGludCBTY3JhdGNoQnVmZmVyRGltZW5zaW9uID0gMTAyNDsgLy8gU2hvdWxkIGJlIGEgcG93ZXIg
b2YgdHdvLgotICAgIG1fdXBkYXRlQXRsYXNlcy5hcHBlbmQoYWRvcHRQdHIobmV3IFVwZGF0ZUF0
bGFzKHRoaXMsIFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24sIGZsYWdzKSkpOwotICAgIHNjaGVkdWxl
UmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotICAgIHJldHVybiBtX3VwZGF0ZUF0bGFzZXMubGFz
dCgpLT5iZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIoYXRsYXNJRCwgc2l6ZSwgb2Zmc2V0
KTsKLX0KLQotY29uc3QgZG91YmxlIFJlbGVhc2VJbmFjdGl2ZUF0bGFzZXNUaW1lckludGVydmFs
ID0gMC41OwotCi12b2lkIExheWVyVHJlZUNvb3JkaW5hdG9yOjpzY2hlZHVsZVJlbGVhc2VJbmFj
dGl2ZUF0bGFzZXMoKQotewotICAgIGlmICghbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIu
aXNBY3RpdmUoKSkKLSAgICAgICAgbV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXIuc3RhcnRS
ZXBlYXRpbmcoUmVsZWFzZUluYWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotfQotCi12b2lk
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpyZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChU
aW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4qKQotewotICAgIC8vIFdlIGFsd2F5cyB3YW50IHRv
IGtlZXAgb25lIGF0bGFzIGZvciBub24tY29tcG9zaXRlZCBjb250ZW50LgotICAgIE93blB0cjxV
cGRhdGVBdGxhcz4gYXRsYXNUb0tlZXBBbnl3YXk7Ci0gICAgYm9vbCBmb3VuZEFjdGl2ZUF0bGFz
Rm9yTm9uQ29tcG9zaXRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gbV91cGRh
dGVBdGxhc2VzLnNpemUoKSAtIDE7ICBpID49IDA7IC0taSkgewotICAgICAgICBVcGRhdGVBdGxh
cyogYXRsYXMgPSBtX3VwZGF0ZUF0bGFzZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYXRsYXMt
PmlzSW5Vc2UoKSkKLSAgICAgICAgICAgIGF0bGFzLT5hZGRUaW1lSW5hY3RpdmUoUmVsZWFzZUlu
YWN0aXZlQXRsYXNlc1RpbWVySW50ZXJ2YWwpOwotICAgICAgICBib29sIHVzYWJsZUZvck5vbkNv
bXBvc2l0ZWRDb250ZW50ID0gIWF0bGFzLT5zdXBwb3J0c0FscGhhKCk7Ci0gICAgICAgIGlmIChh
dGxhcy0+aXNJbmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWZvdW5kQWN0aXZlQXRsYXNG
b3JOb25Db21wb3NpdGVkQ29udGVudCAmJiAhYXRsYXNUb0tlZXBBbnl3YXkgJiYgdXNhYmxlRm9y
Tm9uQ29tcG9zaXRlZENvbnRlbnQpCi0gICAgICAgICAgICAgICAgYXRsYXNUb0tlZXBBbnl3YXkg
PSBtX3VwZGF0ZUF0bGFzZXNbaV0ucmVsZWFzZSgpOwotICAgICAgICAgICAgbV91cGRhdGVBdGxh
c2VzLnJlbW92ZShpKTsKLSAgICAgICAgfSBlbHNlIGlmICh1c2FibGVGb3JOb25Db21wb3NpdGVk
Q29udGVudCkKLSAgICAgICAgICAgIGZvdW5kQWN0aXZlQXRsYXNGb3JOb25Db21wb3NpdGVkQ29u
dGVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFmb3VuZEFjdGl2ZUF0bGFzRm9yTm9uQ29t
cG9zaXRlZENvbnRlbnQgJiYgYXRsYXNUb0tlZXBBbnl3YXkpCi0gICAgICAgIG1fdXBkYXRlQXRs
YXNlcy5hcHBlbmQoYXRsYXNUb0tlZXBBbnl3YXkucmVsZWFzZSgpKTsKLQotICAgIGlmIChtX3Vw
ZGF0ZUF0bGFzZXMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIG1fcmVsZWFzZUluYWN0aXZlQXRsYXNl
c1RpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBMYXllclRyZWVDb29yZGluYXRvcjo6c2V0QmFja2dy
b3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUNvb3JkaW5hdG9yUHJveHk6OlNldEJhY2tncm91bmRD
b2xvcihjb2xvcikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlQ29vcmRpbmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWEzNmNj
NzRkNmQ0OGIyYjI3NDM2Y2EwODk4OTY2NmIwZDFhNDE2ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGluYXRvci5oCisrKyAvZGV2L251
bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGF5ZXJU
cmVlQ29vcmRpbmF0b3JfaAotI2RlZmluZSBMYXllclRyZWVDb29yZGluYXRvcl9oCi0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgotI2luY2x1ZGUg
IkxheWVyVHJlZUNvbnRleHQuaCIKLSNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotI2luY2x1ZGUgIldlYkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVByb3h5LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIFVwZGF0ZUluZm87Ci1jbGFzcyBXZWJQYWdlOwotCi1jbGFzcyBMYXllclRyZWVDb29y
ZGluYXRvciA6IHB1YmxpYyBMYXllclRyZWVIb3N0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50Ci0gICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgLCBw
dWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgLCBwdWJsaWMg
VXBkYXRlQXRsYXNDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFj
dG9yeQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eUNsaWVudAotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJUcmVlQ29vcmRpbmF0b3I+IGNyZWF0ZShXZWJQYWdlKik7Ci0gICAgdmlydHVhbCB+TGF5
ZXJUcmVlQ29vcmRpbmF0b3IoKTsKLQotICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgbGF5ZXJUcmVlQ29udGV4dCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlQ29udGV4dDsgfQotICAg
IHZpcnR1YWwgdm9pZCBzZXRMYXllckZsdXNoU2NoZWR1bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
aG91bGROb3RpZnlBZnRlck5leHRTY2hlZHVsZWRMYXllckZsdXNoKGJvb2wpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7
Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRO
b25Db21wb3NpdGVkQ29udGVudHNOZWVkRGlzcGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
Ci0gICAgdmlydHVhbCB2b2lkIHNjcm9sbE5vbkNvbXBvc2l0ZWRDb250ZW50cyhjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzY3JvbGxP
ZmZzZXQpOwotICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCk7Ci0gICAgdmlydHVhbCB2
b2lkIHNpemVEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBhZ2VPdmVy
bGF5TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0UGFnZU92ZXJsYXlPcGFjaXR5KGZsb2F0KTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFnZU92
ZXJsYXlTaG91bGRBcHBseUZhZGVXaGVuUGFpbnRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlUmVuZGVyaW5nKCkgeyBtX2lzU3VzcGVuZGVkID0g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5k
ZWQgPSBmYWxzZTsgc2NoZWR1bGVMYXllckZsdXNoKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGV2
aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKSB7IH0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6
OkltYWdlKikgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9y
ZXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlVGlsZVVwZGF0ZXNBbGxvd2VkKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiwgZmxvYXQgc2NhbGUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShD
b3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpNZXNzYWdl
RGVjb2RlciYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYp
OwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1
YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29y
ZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNv
cmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZh
cyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpIE9WRVJS
SURFOwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMo
KTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJm
YWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7Ci0KLSAg
ICAvLyBVcGRhdGVBdGxhc0NsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsK
LQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVBbmltYXRpb24oKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklERTsKLQotcHJv
dGVjdGVkOgotICAgIGV4cGxpY2l0IExheWVyVHJlZUNvb3JkaW5hdG9yKFdlYlBhZ2UqKTsKLQot
cHJpdmF0ZToKLSAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJs
ZSB0aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBjbGlwUmVjdCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0
b3IKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmco
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpI
YW5kbGUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250
ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURF
OwotCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7Ci0KLSAgICAv
LyBHcmFwaGljc0xheWVyRmFjdG9yeQotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpH
cmFwaGljc0xheWVyPiBjcmVhdGVHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bGllbnQqKSBPVkVSUklERTsKLQotICAgIC8vIExheWVyVHJlZUNvb3JkaW5hdG9yCi0gICAgdm9p
ZCBpbml0aWFsaXplUm9vdENvbXBvc2l0aW5nTGF5ZXJJZk5lZWRlZCgpOwotICAgIHZvaWQgY3Jl
YXRlUGFnZU92ZXJsYXlMYXllcigpOwotICAgIHZvaWQgZGVzdHJveVBhZ2VPdmVybGF5TGF5ZXIo
KTsKLSAgICBib29sIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgY2FuY2Vs
UGVuZGluZ0xheWVyRmx1c2goKTsKLSAgICB2b2lkIHBlcmZvcm1TY2hlZHVsZWRMYXllckZsdXNo
KCk7Ci0gICAgdm9pZCBkaWRQZXJmb3JtU2NoZWR1bGVkTGF5ZXJGbHVzaCgpOwotICAgIHZvaWQg
c3luY0Rpc3BsYXlTdGF0ZSgpOwotICAgIHZvaWQgbG9ja0FuaW1hdGlvbnMoKTsKLSAgICB2b2lk
IHVubG9ja0FuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgbGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8TGF5ZXJUcmVlQ29vcmRpbmF0b3I+Kik7Ci0KLSAgICB2b2lkIHNjaGVkdWxl
UmVsZWFzZUluYWN0aXZlQXRsYXNlcygpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLSNlbmRpZgotCi0gICAgdm9p
ZCByZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxMYXllclRy
ZWVDb29yZGluYXRvcj4qKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICAvLyBXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtUHJveHlDbGllbnQKLSAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eShXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkqKTsKLQotICAgIHZvaWQg
Y2hlY2tDdXN0b21GaWx0ZXJQcm9ncmFtUHJveGllcyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0gICAgdm9pZCBkaXNjb25uZWN0Q3VzdG9tRmlsdGVyUHJvZ3JhbXMoKTsKLSNl
bmRpZgotCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwot
Ci0gICAgLy8gVGhlIGxheWVyIHdoaWNoIGNvbnRhaW5zIGFsbCBub24tY29tcG9zaXRlZCBjb250
ZW50LgotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX25vbkNvbXBvc2l0ZWRD
b250ZW50TGF5ZXI7Ci0KLSAgICAvLyBUaGUgcGFnZSBvdmVybGF5IGxheWVyLiBXaWxsIGJlIG51
bGwgaWYgdGhlcmUncyBubyBwYWdlIG92ZXJsYXkuCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKLQotICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+IG1fZGV0YWNoZWRMYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5n
czsKLSAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKLQot
I2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dy
YW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9u
b3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2g7Ci0gICAgYm9vbCBtX2lzVmFsaWQ7Ci0gICAg
Ly8gV2UgZG9uJ3Qgc2VuZCB0aGUgbWVzc2FnZXMgcmVsYXRlZCB0byByZWxlYXNpbmcgcmVzb3Vy
Y2VzIHRvIFVJIFByb2Nlc3MgZHVyaW5nIHB1cmdpbmcsIGJlY2F1c2UgVUkgUHJvY2VzcyBhbHJl
YWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLQot
ICAgIGJvb2wgbV93YWl0aW5nRm9yVUlQcm9jZXNzOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZDsK
LSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwotICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKLSAgICBib29sIG1fc2hvdWxkU2VuZFNjcm9sbFBvc2l0aW9uVXBk
YXRlOwotCi0gICAgTGF5ZXJUcmVlQ29udGV4dCBtX2xheWVyVHJlZUNvbnRleHQ7Ci0gICAgYm9v
bCBtX3Nob3VsZFN5bmNGcmFtZTsKLSAgICBib29sIG1fZGlkSW5pdGlhbGl6ZVJvb3RDb21wb3Np
dGluZ0xheWVyOwotICAgIFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUNvb3JkaW5hdG9yPiBtX2xh
eWVyRmx1c2hUaW1lcjsKLSAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVDb29yZGluYXRvcj4g
bV9yZWxlYXNlSW5hY3RpdmVBdGxhc2VzVGltZXI7Ci0gICAgYm9vbCBtX2xheWVyRmx1c2hTY2hl
ZHVsaW5nRW5hYmxlZDsKLSAgICB1aW50NjRfdCBtX2ZvcmNlUmVwYWludEFzeW5jQ2FsbGJhY2tJ
RDsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBMYXllclRyZWVDb29yZGluYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVDb29yZGlu
YXRvci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjM2ZTcwMDllZjEyMWQ4YTRjZmExYTY1NGFjZDI5ZGE4
MzI3NTkwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZUNvb3JkaW5hdG9yLm1lc3NhZ2VzLmluCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBA
QAotIwotIyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0jICAgIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSMgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotIwotIyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSMgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0jCi0jICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSMgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotIyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi1tZXNzYWdlcyAtPiBMYXllclRyZWVDb29yZGluYXRvciB7Ci0g
ICAgU2V0VmlzaWJsZUNvbnRlbnRzUmVjdChXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnRzUmVjdCwgZmxvYXQgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgdHJhamVjdG9yeVZlY3Rv
cnkpCi0gICAgUmVuZGVyTmV4dEZyYW1lKCkKLSAgICBQdXJnZUJhY2tpbmdTdG9yZXMoKQotI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBBbmltYXRpb25GcmFtZVJlYWR5
KCkKLSNlbmRpZgotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDMyN2Y2NTFjOTNmNjJlY2FjNGUzZTEwNTRiMDdlMzIz
MDExZmJiZWMuLmFlNWIyYzhiNjk4OGRjOGQ2ZTJhMTJmNWNjZjZjMzEyMzkzOGQ3NDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBAIC05
NSw3ICs5NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNz
YWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1l
c3NhZ2VEZWNvZGVyJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpID0gMDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCA1ZTcwYzk0NDgxMzQ1MDQzYzQ5N2NmMmE0ZGZlOThj
MWUzMjI5Yzc0Li44NmM1M2IxODEwNzYyMTQzNTE4YmQyOTYzZWNjY2NmMWUyN2E2NTMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJ
bXBsLmNwcApAQCAtNzI5LDEwICs3MjksMTAgQEAgdm9pZCBEcmF3aW5nQXJlYUltcGw6OmRpc3Bs
YXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKIH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLXZvaWQgRHJhd2luZ0FyZWFJbXBsOjpkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0
b3JNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3Nh
Z2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBE
cmF3aW5nQXJlYUltcGw6OmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1lc3NhZ2VJRCBtZXNz
YWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChtX2xh
eWVyVHJlZUhvc3QpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjZWl2ZUxheWVyVHJl
ZUNvb3JkaW5hdG9yTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRlY29kZXIpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RN
ZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgZGVjb2Rlcik7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1w
bC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5o
CmluZGV4IDZkNDk3MTlmN2E5OGNlZjI1ZDQ5MzVmZmE3MDZjYTRjZDJjZmQzYjAuLmEzMTMzMTZj
OWFkOTlkOThmNjZjNzJiYmVmZjk0NWIxMGE5MWVkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKQEAgLTgzLDcgKzgzLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlQ29vcmRpbmF0b3JNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6Ok1lc3NhZ2VEZWNv
ZGVyJik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhv
c3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAjZW5kaWYKIAogICAgIC8vIENvcmVJUEMgbWVzc2FnZSBo
YW5kbGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9M
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXll
clRyZWVIb3N0LmNwcAppbmRleCA3ZDU5MGExYTdhZTYwODA4M2ZhOGY2ZDM3ZTI2YzE2OWRmNDll
ZDRmLi4zZTMwNDJkYTYyNmRlMjFhMDM1ODE3YWExMDAwZjFhYjZlY2U2N2I2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwCkBA
IC0zNSw3ICszNSw3IEBACiAjZW5kaWYKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSNpbmNsdWRlICJMYXllclRyZWVDb29yZGluYXRvci5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5oIgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspICYmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKQEAgLTUzLDcgKzUzLDcgQEAgUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0
PiBMYXllclRyZWVIb3N0OjpjcmVhdGUoV2ViUGFnZSogd2ViUGFnZSkKICNlbGlmIFBMQVRGT1JN
KFdJTikgJiYgSEFWRShXS1FDQSkKICAgICByZXR1cm4gTGF5ZXJUcmVlSG9zdENBV2luOjpjcmVh
dGUod2ViUGFnZSk7CiAjZWxpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgcmV0dXJu
IExheWVyVHJlZUNvb3JkaW5hdG9yOjpjcmVhdGUod2ViUGFnZSk7CisgICAgcmV0dXJuIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHdlYlBhZ2UpOwogI2VsaWYgUExBVEZPUk0oR1RL
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAgICAgcmV0dXJuIExheWVyVHJlZUhvc3RHdGs6
OmNyZWF0ZSh3ZWJQYWdlKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaAppbmRleCBkNGQ1ZWRjOGNjMmY0Zjg2OTI4ZjJlNWMy
ZGQyZGMwOWY3N2FjZjhiLi5lZDg5MTA1NGQzMjM5Mjg4ODZiZmY2MzYxYjY4NTJjMTE4MTQ3Y2Nm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVl
SG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVI
b3N0LmgKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0IC8qIHNjYWxl
ICovLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlck5leHRGcmFtZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVz
c2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKSA9IDA7CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAppbmRleCAxMDJmZjVlYjQ3YWU1Nzc4NWZmZGU4N2Y3NDg5MzI5OTA5ZDhmM2JmLi44MDZm
OTAzMDAxNTZlN2VlMTg1Zjc4MzVkZTAwNTRmODhjMGFlMGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xODMsNyArMTgzLDcgQEAKICNl
bmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkxheWVyVHJl
ZUNvb3JkaW5hdG9yTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhv
c3RNZXNzYWdlcy5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0zNzYsNyAr
Mzc2LDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGJlIGRvbmUgaW4gdGhlIG9iamVjdCBjb25zdHJ1Y3RvcnMsIGFuZCB0aGUgb2JqZWN0cyB0aGVt
c2VsdmVzIHNob3VsZCBiZSBtZXNzYWdlIHJlY2VpdmVycy4KICAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZUlELCB0aGlzKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpMYXllclRyZWVDb29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwg
dGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9w
YWdlSUQsIHRoaXMpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgdGhpcyk7CkBAIC00MDcsNyArNDA3LDcg
QEAgV2ViUGFnZTo6fldlYlBhZ2UoKQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25l
IGluIHRoZSBvYmplY3QgZGVzdHJ1Y3RvcnMsIGFuZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHNo
b3VsZCBiZSBtZXNzYWdlIHJlY2VpdmVycy4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZUlEKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpMYXllclRy
ZWVDb29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX3BhZ2VJRCk7CkBAIC0yOTEyLDkgKzI5MTIsOSBAQCB2b2lkIFdlYlBhZ2U6OmRp
ZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6
Ok1lc3NhZwogICAgIH0KIAogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKSAmJiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG1lc3NhZ2VJRC5pczxDb3JlSVBDOjpNZXNz
YWdlQ2xhc3NMYXllclRyZWVDb29yZGluYXRvcj4oKSkgeworICAgIGlmIChtZXNzYWdlSUQuaXM8
Q29yZUlQQzo6TWVzc2FnZUNsYXNzQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0PigpKSB7CiAgICAg
ICAgIGlmIChtX2RyYXdpbmdBcmVhKQotICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVj
ZWl2ZUxheWVyVHJlZUNvb3JkaW5hdG9yTWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGRl
Y29kZXIpOworICAgICAgICAgICAgbV9kcmF3aW5nQXJlYS0+ZGlkUmVjZWl2ZUNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdE1lc3NhZ2UoY29ubmVjdGlvbiwgbWVzc2FnZUlELCBkZWNvZGVyKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>