<?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>73089</bug_id>
          
          <creation_ts>2011-11-24 11:33:06 -0800</creation_ts>
          <short_desc>[Qt][WK2] Move event handling out of QtWebPageProxy</short_desc>
          <delta_ts>2011-11-25 04:50:46 -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>WebKit Qt</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>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72943</blocked>
    
    <blocked>73096</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesus Sanchez-Palencia">jesus</reporter>
          <assigned_to name="Jesus Sanchez-Palencia">jesus</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508847</commentid>
    <comment_count>0</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2011-11-24 11:33:06 -0800</bug_when>
    <thetext>In order to clean-up QtWebPageProxy we can remove all code related to event handling, including gestures and the interaction engine, and concentrate everything in a new entity: QtWebPageEventHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508861</commentid>
    <comment_count>1</comment_count>
      <attachid>116530</attachid>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2011-11-24 12:19:06 -0800</bug_when>
    <thetext>Created attachment 116530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509057</commentid>
    <comment_count>2</comment_count>
      <attachid>116530</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-11-25 02:39:00 -0800</bug_when>
    <thetext>Comment on attachment 116530
Patch

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

I like this

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:57
&gt; +    eventHandler.reset(new QtWebPageEventHandler(pageProxy-&gt;pageRef()));

Why does this needs to be reset? comment?

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.cpp:37
&gt; +    , m_qtEventHandler(eventHandler)

why the m_qt*?

&gt; Source/WebKit2/UIProcess/qt/QtTapGestureRecognizer.h:52
&gt; -    QtTapGestureRecognizer(QtViewportInteractionEngine*, QtWebPageProxy*);
&gt; +    QtTapGestureRecognizer(QtViewportInteractionEngine*, QtWebPageEventHandler*);

Makes so much more sense :-)

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:144
&gt; +    // For some reason mouse press results in mouse hover (which is
&gt; +    // converted to mouse move for WebKit). We ignore these hover
&gt; +    // events by comparing lastPos with newPos.
&gt; +    // NOTE: lastPos from the event always comes empty, so we work
&gt; +    // around that here.

I wouldnt compress this comment so much,,, hard to read

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:157
&gt; +    if (m_tripleClickTimer.isActive() &amp;&amp; (ev-&gt;pos() - m_tripleClick).manhattanLength() &lt; qApp-&gt;styleHints()-&gt;startDragDistance()) {

Im not sure qApp is correct here, simon?

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:158
&gt; +        m_webPageProxy-&gt;handleMouseEvent(NativeWebMouseEvent(ev, /*eventClickCount=*/3));

/* eventClickCount */ 3 

would be more readable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509097</commentid>
    <comment_count>3</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2011-11-25 04:49:24 -0800</bug_when>
    <thetext>Committed r101164: &lt;http://trac.webkit.org/changeset/101164&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116530</attachid>
            <date>2011-11-24 12:19:06 -0800</date>
            <delta_ts>2011-11-25 04:50:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73089-20111124171846.patch</filename>
            <type>text/plain</type>
            <size>52964</size>
            <attacher name="Jesus Sanchez-Palencia">jesus</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTk3NTgxNmVlYjI0ODZk
MjYxMTM2NjRiZTJkY2I1NmNhMTEzNzNiNy4uOTExZWEwZDFlZjljNWI5N2E3NjUzMmZhMDQxY2Fl
ODM1ZTJjM2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDExLTExLTI0ICBKZXN1
cyBTYW5jaGV6LVBhbGVuY2lhICA8amVzdXMucGFsZW5jaWFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBbUXRdW1dLMl0gTW92ZSBldmVudCBoYW5kbGluZyBvdXQgb2YgUXRXZWJQYWdlUHJveHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDg5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwg
bG9naWMgcmVsYXRlZCB0byBldmVudCBoYW5kbGluZywgZ2VzdHVyZXMgYW5kIHRoZQorICAgICAg
ICBpbnRlcmFjdGlvbiBlbmdpbmUgb3V0IG9mIFF0V2ViUGFnZVByb3h5LCBjcmVhdGluZyBhIHNl
cGFyYXRlCisgICAgICAgIGNsYXNzIGNhbGxlZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXIuIFRoaXMg
aGFuZGxlciB3aWxsIGJlIGNyZWF0ZWQKKyAgICAgICAgYnkgdGhlIFFRdWlja1dlYlZpZXdQcml2
YXRlIGFuZCB3aWxsIGJlIHJlZ2lzdGVyZWQgaW50byBRdFdlYlBhZ2VQcm94eS4KKyAgICAgICAg
UVF1aWNrV2ViUGFnZSB3aWxsIG5vdyBjYWxsIGhhbmRsZUV2ZW50IHRocm91Z2ggdGhpcyBlbnRp
dHkuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpldmVudCk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6ZURlc2t0b3ApOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmluaXRpYWxpemVUb3VjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVS
ZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6
UXRUYXBHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJl
Y29nbml6ZXI6OnJlY29nbml6ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29n
bml6ZXI6OnRhcFRpbWVvdXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVS
ZWNvZ25pemVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkcmFnT3BlcmF0
aW9uVG9Ecm9wQWN0aW9uKToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZHJhZ09w
ZXJhdGlvblRvRHJvcEFjdGlvbnMpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpk
cm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjo6flF0V2ViUGFnZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
TW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVN
b3VzZVJlbGVhc2VFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlRG91YmxlQ2xpY2tFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6
OmhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5k
bGVIb3ZlckxlYXZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5k
bGVIb3Zlck1vdmVFdmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRs
ZURyYWdFbnRlckV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxl
RHJhZ0xlYXZlRXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVE
cmFnTW92ZUV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJv
cEV2ZW50KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlU2luZ2xlVGFw
RXZlbnQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEb3VibGVUYXBF
dmVudCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnRpbWVyRXZlbnQpOgorICAg
ICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlQcmVzc0V2ZW50KToKKyAgICAg
ICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5UmVsZWFzZUV2ZW50KToKKyAgICAg
ICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRm9jdXNJbkV2ZW50KToKKyAgICAgICAg
KFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRm9jdXNPdXRFdmVudCk6CisgICAgICAgIChR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpOgorICAg
ICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjp0b3VjaEV2ZW50KToKKyAgICAgICAgKFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcnMpOgorICAgICAgICAoUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAgICAgICAoUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjpkaWRGaW5kWm9vbWFibGVBcmVhKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6UXRXZWJQ
YWdlUHJveHkpOgorICAgICAgICAoUXRXZWJQYWdlUHJveHk6OmluaXQpOgorICAgICAgICAoUXRX
ZWJQYWdlUHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEpOgorICAgICAgICAoUXRXZWJQYWdlUHJv
eHk6OnByb2Nlc3NEaWRDcmFzaCk6CisgICAgICAgIChRdFdlYlBhZ2VQcm94eTo6c3RhcnREcmFn
KToKKyAgICAgICAgKFF0V2ViUGFnZVByb3h5Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5oOgorICAgICAgICAoUXRXZWJQYWdlUHJv
eHk6OmV2ZW50SGFuZGxlcik6CisKIDIwMTEtMTEtMjQgIFplbm8gQWxiaXNzZXIgIDx6ZW5vQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVdLMl1bTWFjXSBVc2UgTWFjIHBvcnQncyBJUEMgaW1w
bGVtZW50YXRpb24gaW5zdGVhZCBvZiBVbml4IHNvY2tldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDA0MTQ4
ODhlODNlYTdjZGYxZjlmMjlkYTM2NjYwZTIzZjcyN2Q5ODUuLmIwNzNiNDZiMDc4NjU0Y2RkNWEw
YjMzZDBiY2I0YTNiNzNiZThkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMzE0LDYgKzMxNCw3IEBAIEhF
QURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAgICAg
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9DbGllbnRJbXBsLmgg
XAorICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2Vz
dHVyZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2du
aXplci5oIFwKQEAgLTYxOCw2ICs2MTksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvQ2xpZW50SW1wbC5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAorICAgIFVJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJl
UmVjb2duaXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVy
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAK
aW5kZXggMDJmYzYzZDlmYmY3ZmYzNmZlOGE0NWRhMjEwNWQ4YTNmMTkwNzhiMS4uZTE4ZTM4MzEz
OTVlMzg5Zjg4ODliZGVjYjQ5Y2UxYTMxMDg2ZThhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKKyNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vi
cGFnZV9wX3AuaCIKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIFFRdWlja1dlYlBhZ2U6Omdlb21l
dHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25zdCBRUmVjdEYmIG9sZAog
CiBib29sIFFRdWlja1dlYlBhZ2U6OmV2ZW50KFFFdmVudCogZXYpCiB7Ci0gICAgaWYgKGQtPnBh
Z2VQcm94eS0+aGFuZGxlRXZlbnQoZXYpKQorICAgIGlmIChkLT5wYWdlUHJveHktPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVFdmVudChldikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChl
di0+dHlwZSgpID09IFFFdmVudDo6SW5wdXRNZXRob2QpCiAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgYW4gZW5kbGVzcyBsb29wIGluIGNvbm5lY3Rp
b24gd2l0aCBRUXVpY2tJdGVtOjpldmVudCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggZWJmODQxNzYwODc1MTkwMjAyMjlh
ZjZmYjk4YzcxODIzNjE2YzgwOC4uNWNmMDdjOGEzNTU1NjkyODZlZjYyNTE3YmQ3YTZjNTE5NjU2
YzNlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXcuY3BwCkBAIC01MSwxMSArNTEsMTMgQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlj
a1dlYlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBXS0NvbnRleHRSZWYKICAg
ICBwYWdlVmlldy5yZXNldChuZXcgUVF1aWNrV2ViUGFnZSh2aWV3cG9ydCkpOwogCiAgICAgUVF1
aWNrV2ViUGFnZVByaXZhdGUqIGNvbnN0IHBhZ2VWaWV3UHJpdmF0ZSA9IHBhZ2VWaWV3LmRhdGEo
KS0+ZDsKLSAgICBzZXRQYWdlUHJveHkobmV3IFF0V2ViUGFnZVByb3h5KHBhZ2VWaWV3LmRhdGEo
KSwgcV9wdHIsIC8qIGludGVyYWN0aW9uRW5naW5lICovIDAsIGNvbnRleHRSZWYsIHBhZ2VHcm91
cFJlZikpOworICAgIHNldFBhZ2VQcm94eShuZXcgUXRXZWJQYWdlUHJveHkocGFnZVZpZXcuZGF0
YSgpLCBxX3B0ciwgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7CiAgICAgcGFnZVZpZXdQcml2
YXRlLT5zZXRQYWdlUHJveHkocGFnZVByb3h5LmRhdGEoKSk7CiAKKyAgICBldmVudEhhbmRsZXIu
cmVzZXQobmV3IFF0V2ViUGFnZUV2ZW50SGFuZGxlcihwYWdlUHJveHktPnBhZ2VSZWYoKSkpOwor
CiAgICAgUVdlYlByZWZlcmVuY2VzUHJpdmF0ZTo6Z2V0KHBhZ2VQcm94eS0+cHJlZmVyZW5jZXMo
KSktPnNldEF0dHJpYnV0ZShRV2ViUHJlZmVyZW5jZXNQcml2YXRlOjpBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZCwgdHJ1ZSk7Ci0gICAgcGFnZVByb3h5LT5pbml0KCk7CisgICAgcGFnZVBy
b3h5LT5pbml0KGV2ZW50SGFuZGxlci5kYXRhKCkpOwogCiAgICAgcGFnZUxvYWRDbGllbnQucmVz
ZXQobmV3IFF0V2ViUGFnZUxvYWRDbGllbnQocGFnZVByb3h5LT5wYWdlUmVmKCksIHFfcHRyKSk7
CiAgICAgcGFnZVBvbGljeUNsaWVudC5yZXNldChuZXcgUXRXZWJQYWdlUG9saWN5Q2xpZW50KHBh
Z2VQcm94eS0+cGFnZVJlZigpLCBxX3B0cikpOwpAQCAtODcsMTQgKzg5LDE0IEBAIHZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemVEZXNrdG9wKFFRdWlja1dlYlZpZXcqIHZpZXdw
b3J0KQogICAgICAgICBRT2JqZWN0OjpkaXNjb25uZWN0KGludGVyYWN0aW9uRW5naW5lLmRhdGEo
KSwgU0lHTkFMKHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBvaW50RiYp
KSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdlZChjb25z
dCBRUG9pbnRGJikpKTsKICAgICB9CiAgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQoMCk7Ci0g
ICAgcGFnZVByb3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKDApOworICAgIGV2ZW50
SGFuZGxlci0+c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgwKTsKICAgICBlbmFibGVNb3Vz
ZUV2ZW50cygpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplVG91
Y2goUVF1aWNrV2ViVmlldyogdmlld3BvcnQpCiB7CiAgICAgaW50ZXJhY3Rpb25FbmdpbmUucmVz
ZXQobmV3IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSh2aWV3cG9ydCwgcGFnZVZpZXcuZGF0
YSgpKSk7Ci0gICAgcGFnZVByb3h5LT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGludGVy
YWN0aW9uRW5naW5lLmRhdGEoKSk7CisgICAgZXZlbnRIYW5kbGVyLT5zZXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKGludGVyYWN0aW9uRW5naW5lLmRhdGEoKSk7CiAgICAgZGlzYWJsZU1vdXNl
RXZlbnRzKCk7CiAgICAgUU9iamVjdDo6Y29ubmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCks
IFNJR05BTCh2aWV3cG9ydFVwZGF0ZVJlcXVlc3RlZCgpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmll
d3BvcnRVcGRhdGVkKCkpKTsKICAgICBRT2JqZWN0Ojpjb25uZWN0KGludGVyYWN0aW9uRW5naW5l
LmRhdGEoKSwgU0lHTkFMKHZpZXdwb3J0VHJhamVjdG9yeVZlY3RvckNoYW5nZWQoY29uc3QgUVBv
aW50RiYpKSwgdmlld3BvcnQsIFNMT1QoX3Ffdmlld3BvcnRUcmFqZWN0b3J5VmVjdG9yQ2hhbmdl
ZChjb25zdCBRUG9pbnRGJikpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAppbmRleCBmYzhjMmNhZGI4NTMyYjRiZWQxZTQ0YTEy
NTMxZGU2ZGVkOTI5NjcxLi5jNzBkMzI3Mjk5ZWUwNmFjNmI1ZDUyYzQwN2MzY2FkODJkMDUwZmFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3BfcC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIHFxdWlja3dlYnZpZXdfcF9wX2gK
ICNkZWZpbmUgcXF1aWNrd2Vidmlld19wX3BfaAogCisjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCiAjaW5j
bHVkZSAiUXRXZWJQYWdlTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVBvbGljeUNs
aWVudC5oIgpAQCAtMTA4LDYgKzEwOSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFZpZXdJ
bkF0dGFjaGVkUHJvcGVydGllcyhRT2JqZWN0Kik7CiAKKyAgICBRU2NvcGVkUG9pbnRlcjxRdFdl
YlBhZ2VFdmVudEhhbmRsZXI+IGV2ZW50SGFuZGxlcjsKKwogICAgIFFTY29wZWRQb2ludGVyPFF0
V2ViUGFnZUxvYWRDbGllbnQ+IHBhZ2VMb2FkQ2xpZW50OwogICAgIFFTY29wZWRQb2ludGVyPFF0
V2ViUGFnZVBvbGljeUNsaWVudD4gcGFnZVBvbGljeUNsaWVudDsKICAgICBRU2NvcGVkUG9pbnRl
cjxRdFdlYlBhZ2VVSUNsaWVudD4gcGFnZVVJQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDg0OWIz
NGRjYTg4YjQwNDAzY2RiODkxOGUwNTliY2U1NjAwOGM4YmIuLjJiZjc1NWMwMWNkZDI1Yzg1ODA0
MjU2NTczMzRlOGNmYmE5ZTNiM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTI1LDE2ICsyNSwxNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0VGFwR2VzdHVyZVJlY29nbml6ZXIuaCIK
IAotI2luY2x1ZGUgIlF0V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCiAjaW5j
bHVkZSA8UUxpbmVGPgogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6UXRUYXBHZXN0dXJlUmVjb2duaXplcihRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGludGVyYWN0aW9uRW5naW5lLCBRdFdlYlBhZ2VQcm94
eSogcGFnZSkKK1F0VGFwR2VzdHVyZVJlY29nbml6ZXI6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXIo
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBpbnRlcmFjdGlvbkVuZ2luZSwgUXRXZWJQYWdl
RXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIpCiAgICAgOiBRdEdlc3R1cmVSZWNvZ25pemVyKGlu
dGVyYWN0aW9uRW5naW5lKQotICAgICwgbV93ZWJQYWdlUHJveHkocGFnZSkKKyAgICAsIG1fcXRF
dmVudEhhbmRsZXIoZXZlbnRIYW5kbGVyKQogICAgICwgbV90YXBTdGF0ZShOb1RhcCkKIHsKICAg
ICByZXNldCgpOwpAQCAtMTAwLDggKzEwMCw4IEBAIGJvb2wgUXRUYXBHZXN0dXJlUmVjb2duaXpl
cjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2ZW50VGltCiAg
ICAgICAgICAgICAgICAgY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHRvdWNoUG9pbnQg
PSBldmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpOwogICAgICAgICAgICAgICAgIFFQb2ludEYg
c3RhcnRQb3NpdGlvbiA9IHRvdWNoUG9pbnQuc3RhcnRTY3JlZW5Qb3MoKTsKICAgICAgICAgICAg
ICAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gdG91Y2hQb2ludC5zY3JlZW5Qb3MoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoUUxpbmVGKGVuZFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKS5sZW5ndGgo
KSA8IG1heERvdWJsZVRhcERpc3RhbmNlICYmIG1fd2ViUGFnZVByb3h5KQotICAgICAgICAgICAg
ICAgICAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlRG91YmxlVGFwRXZlbnQodG91Y2hQb2ludCk7
CisgICAgICAgICAgICAgICAgaWYgKFFMaW5lRihlbmRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbiku
bGVuZ3RoKCkgPCBtYXhEb3VibGVUYXBEaXN0YW5jZSAmJiBtX3F0RXZlbnRIYW5kbGVyKQorICAg
ICAgICAgICAgICAgICAgICBtX3F0RXZlbnRIYW5kbGVyLT5oYW5kbGVEb3VibGVUYXBFdmVudCh0
b3VjaFBvaW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBTaW5nbGVUYXBTdGFydGVkOgpAQCAtMTI1LDcgKzEyNSw3IEBAIGJvb2wgUXRUYXBH
ZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWlu
dDY0IGV2ZW50VGltCiB2b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRhcFRpbWVvdXQoKQog
ewogICAgIG1fZG91YmxlVGFwVGltZXIuc3RvcCgpOwotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5k
bGVTaW5nbGVUYXBFdmVudChtX3RvdWNoQmVnaW5FdmVudEZvclRhcC0+dG91Y2hQb2ludHMoKS5h
dCgwKSk7CisgICAgbV9xdEV2ZW50SGFuZGxlci0+aGFuZGxlU2luZ2xlVGFwRXZlbnQobV90b3Vj
aEJlZ2luRXZlbnRGb3JUYXAtPnRvdWNoUG9pbnRzKCkuYXQoMCkpOwogICAgIG1fdG91Y2hCZWdp
bkV2ZW50Rm9yVGFwLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCmluZGV4IGI2YWJlYmVlNTRhZjUyZTlj
MzE3ZjcyMDA0M2E4OThkZGFlZDkyM2MuLmUyY2NmOGIyYzY2Y2FmOGQ1NTA0ZDY3YjFlZGIyYjUx
YmM3NzA5MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdl
c3R1cmVSZWNvZ25pemVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFw
R2VzdHVyZVJlY29nbml6ZXIuaApAQCAtNDMsMTMgKzQzLDEzIEBAIGNvbnN0IHFyZWFsIG1heERv
dWJsZVRhcERpc3RhbmNlID0gMTIwOwogY29uc3QgaW50IHRhcEFuZEhvbGRUaW1lID0gODAwOwog
Y29uc3QgaW50IGRvdWJsZUNsaWNrSW50ZXJ2YWwgPSA0MDA7CiAKLWNsYXNzIFF0V2ViUGFnZVBy
b3h5OworY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogY2xhc3MgUXRUYXBHZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBRT2JqZWN0LCBwcml2YXRl
IFF0R2VzdHVyZVJlY29nbml6ZXIgewogcHVibGljOgotICAgIFF0VGFwR2VzdHVyZVJlY29nbml6
ZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiwgUXRXZWJQYWdlUHJveHkqKTsKKyAgICBR
dFRhcEdlc3R1cmVSZWNvZ25pemVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSosIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlciopOwogICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqKTsKICAgICBib29sIHJlY29nbml6ZShjb25z
dCBRVG91Y2hFdmVudCosIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgdm9pZCBy
ZXNldCgpOwpAQCAtNjAsNyArNjAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB0YXBBbmRIb2xk
VGltZW91dCgpOwogCiBwcml2YXRlOgotICAgIFF0V2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94
eTsKKyAgICBRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIG1fcXRFdmVudEhhbmRsZXI7CiAgICAgUUJh
c2ljVGltZXIgbV9kb3VibGVUYXBUaW1lcjsKICAgICBRQmFzaWNUaW1lciBtX3RhcEFuZEhvbGRU
aW1lcjsKICAgICBPd25QdHI8UVRvdWNoRXZlbnQ+IG1fdG91Y2hCZWdpbkV2ZW50Rm9yVGFwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFu
ZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYzg5NzhiZjJhOWUxNGIzMjQyMGFiZjhjZTQ4YTRkMDVlMmQy
ZjVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTAsMCArMSwzODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmgiCisKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAi
TmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIK
KyNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlIDxRRHJh
Zz4KKyNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZlbnQ+CisjaW5jbHVkZSA8UUd1aUFw
cGxpY2F0aW9uPgorI2luY2x1ZGUgPFFTdHlsZUhpbnRzPgorI2luY2x1ZGUgPFFUb3VjaEV2ZW50
PgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitRdDo6RHJvcEFjdGlvbiBRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24odW5zaWduZWQgZHJhZ09wZXJh
dGlvbikKK3sKKyAgICBRdDo6RHJvcEFjdGlvbiByZXN1bHQgPSBRdDo6SWdub3JlQWN0aW9uOwor
ICAgIGlmIChkcmFnT3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpCisgICAgICAgIHJlc3Vs
dCA9IFF0OjpDb3B5QWN0aW9uOworICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBEcmFnT3Bl
cmF0aW9uTW92ZSkKKyAgICAgICAgcmVzdWx0ID0gUXQ6Ok1vdmVBY3Rpb247CisgICAgZWxzZSBp
ZiAoZHJhZ09wZXJhdGlvbiAmIERyYWdPcGVyYXRpb25HZW5lcmljKQorICAgICAgICByZXN1bHQg
PSBRdDo6TW92ZUFjdGlvbjsKKyAgICBlbHNlIGlmIChkcmFnT3BlcmF0aW9uICYgRHJhZ09wZXJh
dGlvbkxpbmspCisgICAgICAgIHJlc3VsdCA9IFF0OjpMaW5rQWN0aW9uOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1F0OjpEcm9wQWN0aW9ucyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRyYWdP
cGVyYXRpb25Ub0Ryb3BBY3Rpb25zKHVuc2lnbmVkIGRyYWdPcGVyYXRpb25zKQoreworICAgIFF0
OjpEcm9wQWN0aW9ucyByZXN1bHQgPSBRdDo6SWdub3JlQWN0aW9uOworICAgIGlmIChkcmFnT3Bl
cmF0aW9ucyAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICByZXN1bHQgfD0gUXQ6OkNvcHlB
Y3Rpb247CisgICAgaWYgKGRyYWdPcGVyYXRpb25zICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAg
ICAgIHJlc3VsdCB8PSBRdDo6TW92ZUFjdGlvbjsKKyAgICBpZiAoZHJhZ09wZXJhdGlvbnMgJiBE
cmFnT3BlcmF0aW9uR2VuZXJpYykKKyAgICAgICAgcmVzdWx0IHw9IFF0OjpNb3ZlQWN0aW9uOwor
ICAgIGlmIChkcmFnT3BlcmF0aW9ucyAmIERyYWdPcGVyYXRpb25MaW5rKQorICAgICAgICByZXN1
bHQgfD0gUXQ6OkxpbmtBY3Rpb247CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViQ29yZTo6
RHJhZ09wZXJhdGlvbiBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRyb3BBY3Rpb25Ub0RyYWdPcGVy
YXRpb24oUXQ6OkRyb3BBY3Rpb25zIGFjdGlvbnMpCit7CisgICAgdW5zaWduZWQgcmVzdWx0ID0g
MDsKKyAgICBpZiAoYWN0aW9ucyAmIFF0OjpDb3B5QWN0aW9uKQorICAgICAgICByZXN1bHQgfD0g
RHJhZ09wZXJhdGlvbkNvcHk7CisgICAgaWYgKGFjdGlvbnMgJiBRdDo6TW92ZUFjdGlvbikKKyAg
ICAgICAgcmVzdWx0IHw9IChEcmFnT3BlcmF0aW9uTW92ZSB8IERyYWdPcGVyYXRpb25HZW5lcmlj
KTsKKyAgICBpZiAoYWN0aW9ucyAmIFF0OjpMaW5rQWN0aW9uKQorICAgICAgICByZXN1bHQgfD0g
RHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKHJlc3VsdCA9PSAoRHJhZ09wZXJhdGlvbkNvcHkg
fCBEcmFnT3BlcmF0aW9uTW92ZSB8IERyYWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlv
bkxpbmspKQorICAgICAgICByZXN1bHQgPSBEcmFnT3BlcmF0aW9uRXZlcnk7CisgICAgcmV0dXJu
IChEcmFnT3BlcmF0aW9uKXJlc3VsdDsKK30KKworUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpRdFdl
YlBhZ2VFdmVudEhhbmRsZXIoV0tQYWdlUmVmIHBhZ2VSZWYsIFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgIDogbV93ZWJQ
YWdlUHJveHkodG9JbXBsKHBhZ2VSZWYpKQorICAgICwgbV9pbnRlcmFjdGlvbkVuZ2luZSh2aWV3
cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXplcih2aWV3
cG9ydEludGVyYWN0aW9uRW5naW5lKQorICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyKHZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCisgICAgLCBtX3RhcEdlc3R1cmVSZWNvZ25pemVyKHZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUsIHRoaXMpCit7Cit9CisKK1F0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6flF0V2ViUGFnZUV2ZW50SGFuZGxlcigpCit7Cit9CisKK2Jvb2wgUXRXZWJQYWdlRXZl
bnRIYW5kbGVyOjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQoreworICAgIHN3aXRjaCAoZXYtPnR5
cGUoKSkgeworICAgIGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIHJldHVybiBoYW5k
bGVNb3VzZU1vdmVFdmVudChyZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKKyAg
ICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1v
dXNlUHJlc3NFdmVudChyZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKKyAgICBj
YXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgorICAgICAgICByZXR1cm4gaGFuZGxlTW91
c2VSZWxlYXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7CisgICAg
Y2FzZSBRRXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2s6CisgICAgICAgIHJldHVybiBoYW5kbGVN
b3VzZURvdWJsZUNsaWNrRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7
CisgICAgY2FzZSBRRXZlbnQ6OldoZWVsOgorICAgICAgICByZXR1cm4gaGFuZGxlV2hlZWxFdmVu
dChyZWludGVycHJldF9jYXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6
SG92ZXJMZWF2ZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTGVhdmVFdmVudChyZWludGVy
cHJldF9jYXN0PFFIb3ZlckV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6SG92ZXJFbnRl
cjogLy8gRmFsbC10aHJvdWdoLCBmb3IgV2ViS2l0IHRoZSBkaXN0aW5jdGlvbiBkb2Vzbid0IG1h
dHRlci4KKyAgICBjYXNlIFFFdmVudDo6SG92ZXJNb3ZlOgorICAgICAgICByZXR1cm4gaGFuZGxl
SG92ZXJNb3ZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRSG92ZXJFdmVudCo+KGV2KSk7CisgICAg
Y2FzZSBRRXZlbnQ6OkRyYWdFbnRlcjoKKyAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdFbnRlckV2
ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UURyYWdFbnRlckV2ZW50Kj4oZXYpKTsKKyAgICBjYXNlIFFF
dmVudDo6RHJhZ0xlYXZlOgorICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQocmVp
bnRlcnByZXRfY2FzdDxRRHJhZ0xlYXZlRXZlbnQqPihldikpOworICAgIGNhc2UgUUV2ZW50OjpE
cmFnTW92ZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdNb3ZlRXZlbnQocmVpbnRlcnByZXRf
Y2FzdDxRRHJhZ01vdmVFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OkRyb3A6CisgICAg
ICAgIHJldHVybiBoYW5kbGVEcm9wRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJvcEV2ZW50Kj4o
ZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6CisgICAgICAgIHJldHVybiBoYW5kbGVL
ZXlQcmVzc0V2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UUtleUV2ZW50Kj4oZXYpKTsKKyAgICBjYXNl
IFFFdmVudDo6S2V5UmVsZWFzZToKKyAgICAgICAgcmV0dXJuIGhhbmRsZUtleVJlbGVhc2VFdmVu
dChyZWludGVycHJldF9jYXN0PFFLZXlFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OkZv
Y3VzSW46CisgICAgICAgIHJldHVybiBoYW5kbGVGb2N1c0luRXZlbnQocmVpbnRlcnByZXRfY2Fz
dDxRRm9jdXNFdmVudCo+KGV2KSk7CisgICAgY2FzZSBRRXZlbnQ6OkZvY3VzT3V0OgorICAgICAg
ICByZXR1cm4gaGFuZGxlRm9jdXNPdXRFdmVudChyZWludGVycHJldF9jYXN0PFFGb2N1c0V2ZW50
Kj4oZXYpKTsKKyAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKKyAgICBjYXNlIFFFdmVudDo6
VG91Y2hFbmQ6CisgICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgorICAgICAgICB0b3VjaEV2
ZW50KHN0YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXYpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gRklYTUU6IE1vdmUgYWxsIGNvbW1vbiBldmVudCBoYW5kbGluZyBo
ZXJlLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6
OmhhbmRsZU1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKK3sKKyAgICAvLyBGb3Igc29t
ZSByZWFzb24gbW91c2UgcHJlc3MgcmVzdWx0cyBpbiBtb3VzZSBob3ZlciAod2hpY2ggaXMKKyAg
ICAvLyBjb252ZXJ0ZWQgdG8gbW91c2UgbW92ZSBmb3IgV2ViS2l0KS4gV2UgaWdub3JlIHRoZXNl
IGhvdmVyCisgICAgLy8gZXZlbnRzIGJ5IGNvbXBhcmluZyBsYXN0UG9zIHdpdGggbmV3UG9zLgor
ICAgIC8vIE5PVEU6IGxhc3RQb3MgZnJvbSB0aGUgZXZlbnQgYWx3YXlzIGNvbWVzIGVtcHR5LCBz
byB3ZSB3b3JrCisgICAgLy8gYXJvdW5kIHRoYXQgaGVyZS4KKyAgICBzdGF0aWMgUVBvaW50RiBs
YXN0UG9zID0gUVBvaW50RigpOworICAgIGlmIChsYXN0UG9zID09IGV2LT5wb3MoKSkKKyAgICAg
ICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7CisgICAgbGFzdFBvcyA9IGV2LT5wb3MoKTsKKwor
ICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQo
ZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMCkpOworCisgICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVk
KCk7Cit9CisKK2Jvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZl
bnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAgIGlmIChtX3RyaXBsZUNsaWNrVGltZXIuaXNBY3Rp
dmUoKSAmJiAoZXYtPnBvcygpIC0gbV90cmlwbGVDbGljaykubWFuaGF0dGFuTGVuZ3RoKCkgPCBx
QXBwLT5zdHlsZUhpbnRzKCktPnN0YXJ0RHJhZ0Rpc3RhbmNlKCkpIHsKKyAgICAgICAgbV93ZWJQ
YWdlUHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgLypldmVu
dENsaWNrQ291bnQ9Ki8zKSk7CisgICAgICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOworICAg
IH0KKworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNl
RXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMSkpOworICAgIHJldHVybiBldi0+aXNBY2Nl
cHRlZCgpOworfQorCitib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxl
YXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVN
b3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMCkp
OworICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOworfQorCitib29sIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBldikKK3sK
KyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50
KGV2LCAvKmV2ZW50Q2xpY2tDb3VudD0qLzIpKTsKKworICAgIG1fdHJpcGxlQ2xpY2tUaW1lci5z
dGFydChxQXBwLT5zdHlsZUhpbnRzKCktPm1vdXNlRG91YmxlQ2xpY2tJbnRlcnZhbCgpLCB0aGlz
KTsKKyAgICBtX3RyaXBsZUNsaWNrID0gZXYtPmxvY2FsUG9zKCkudG9Qb2ludCgpOworICAgIHJl
dHVybiBldi0+aXNBY2NlcHRlZCgpOworfQorCitib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
aGFuZGxlV2hlZWxFdmVudChRV2hlZWxFdmVudCogZXYpCit7CisgICAgbV93ZWJQYWdlUHJveHkt
PmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChldikpOworICAgIC8vIEZJWE1F
OiBIYW5kbGUgd2hldGhlciB0aGUgcGFnZSB1c2VkIHRoZSB3aGVlbCBldmVudCBvciBub3QuCisg
ICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUpCisgICAgICAgIG1faW50ZXJhY3Rpb25FbmdpbmUt
PndoZWVsRXZlbnQoZXYpOworICAgIHJldHVybiBldi0+aXNBY2NlcHRlZCgpOworfQorCitib29s
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSG92ZXJMZWF2ZUV2ZW50KFFIb3ZlckV2ZW50
KiBldikKK3sKKyAgICAvLyBUbyBnZXQgdGhlIGNvcnJlY3QgYmVoYXZpb3Igb2YgbW91c2VvdXQs
IHdlIG5lZWQgdG8gdHVybiB0aGUgTGVhdmUgZXZlbnQgb2Ygb3VyIHdlYnZpZXcgaW50byBhIG1v
dXNlIG1vdmUKKyAgICAvLyB0byBhIHZlcnkgZmFyIHJlZ2lvbi4KKyAgICBRSG92ZXJFdmVudCBm
YWtlRXZlbnQoUUV2ZW50OjpIb3Zlck1vdmUsIFFQb2ludChJTlRfTUlOLCBJTlRfTUlOKSwgZXYt
Pm9sZFBvcygpKTsKKyAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQoJmZha2VFdmVudCk7
Cit9CisKK2Jvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVIb3Zlck1vdmVFdmVudChR
SG92ZXJFdmVudCogZXYpCit7CisgICAgUU1vdXNlRXZlbnQgbWUoUUV2ZW50OjpNb3VzZU1vdmUs
IGV2LT5wb3MoKSwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsK
KyAgICBtZS5zZXRBY2NlcHRlZChldi0+aXNBY2NlcHRlZCgpKTsKKworICAgIHJldHVybiBoYW5k
bGVNb3VzZU1vdmVFdmVudCgmbWUpOworfQorCitib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
aGFuZGxlRHJhZ0VudGVyRXZlbnQoUURyYWdFbnRlckV2ZW50KiBldikKK3sKKyAgICBtX3dlYlBh
Z2VQcm94eS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7CisgICAgLy8gRklYTUU6IFNob3VsZCBub3Qg
dXNlIFFDdXJzb3I6OnBvcygpCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZXYtPm1pbWVEYXRhKCks
IGV2LT5wb3MoKSwgUUN1cnNvcjo6cG9zKCksIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZXYt
PnBvc3NpYmxlQWN0aW9ucygpKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYWdFbnRlcmVkKCZk
cmFnRGF0YSk7CisgICAgZXYtPmFjY2VwdFByb3Bvc2VkQWN0aW9uKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVEcmFnTGVhdmVFdmVu
dChRRHJhZ0xlYXZlRXZlbnQqIGV2KQoreworICAgIGJvb2wgYWNjZXB0ZWQgPSBldi0+aXNBY2Nl
cHRlZCgpOworCisgICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFFDdXJzb3I6OnBvcygpCisg
ICAgRHJhZ0RhdGEgZHJhZ0RhdGEoMCwgSW50UG9pbnQoKSwgUUN1cnNvcjo6cG9zKCksIERyYWdP
cGVyYXRpb25Ob25lKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEp
OworICAgIG1fd2ViUGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKKworICAgIGV2LT5z
ZXRBY2NlcHRlZChhY2NlcHRlZCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCitib29sIFF0
V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCog
ZXYpCit7CisgICAgYm9vbCBhY2NlcHRlZCA9IGV2LT5pc0FjY2VwdGVkKCk7CisKKyAgICAvLyBG
SVhNRTogU2hvdWxkIG5vdCB1c2UgUUN1cnNvcjo6cG9zKCkKKyAgICBEcmFnRGF0YSBkcmFnRGF0
YShldi0+bWltZURhdGEoKSwgZXYtPnBvcygpLCBRQ3Vyc29yOjpwb3MoKSwgZHJvcEFjdGlvblRv
RHJhZ09wZXJhdGlvbihldi0+cG9zc2libGVBY3Rpb25zKCkpKTsKKyAgICBtX3dlYlBhZ2VQcm94
eS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICBldi0+c2V0RHJvcEFjdGlvbihkcmFnT3Bl
cmF0aW9uVG9Ecm9wQWN0aW9uKG1fd2ViUGFnZVByb3h5LT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlv
bikpOworICAgIGlmIChtX3dlYlBhZ2VQcm94eS0+ZHJhZ1Nlc3Npb24oKS5vcGVyYXRpb24gIT0g
RHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAgIGV2LT5hY2NlcHQoKTsKKworICAgIGV2LT5zZXRB
Y2NlcHRlZChhY2NlcHRlZCk7CisgICAgcmV0dXJuIGFjY2VwdGVkOworfQorCitib29sIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRHJvcEV2ZW50KFFEcm9wRXZlbnQqIGV2KQoreworICAg
IGJvb2wgYWNjZXB0ZWQgPSBldi0+aXNBY2NlcHRlZCgpOworCisgICAgLy8gRklYTUU6IFNob3Vs
ZCBub3QgdXNlIFFDdXJzb3I6OnBvcygpCisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZXYtPm1pbWVE
YXRhKCksIGV2LT5wb3MoKSwgUUN1cnNvcjo6cG9zKCksIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRp
b24oZXYtPnBvc3NpYmxlQWN0aW9ucygpKSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
IGhhbmRsZTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBTdHJp
bmcoKSwgaGFuZGxlKTsKKyAgICBldi0+c2V0RHJvcEFjdGlvbihkcmFnT3BlcmF0aW9uVG9Ecm9w
QWN0aW9uKG1fd2ViUGFnZVByb3h5LT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlvbikpOworICAgIGV2
LT5hY2NlcHQoKTsKKworICAgIGV2LT5zZXRBY2NlcHRlZChhY2NlcHRlZCk7CisgICAgcmV0dXJu
IGFjY2VwdGVkOworfQorCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlU2luZ2xl
VGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50KQoreworICAgIFdl
Ykdlc3R1cmVFdmVudCBnZXN0dXJlKFdlYkV2ZW50OjpHZXN0dXJlU2luZ2xlVGFwLCBwb2ludC5w
b3MoKS50b1BvaW50KCksIHBvaW50LnNjcmVlblBvcygpLnRvUG9pbnQoKSwgV2ViRXZlbnQ6Ok1v
ZGlmaWVycygwKSwgMCk7CisgICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZUdlc3R1cmVFdmVudChn
ZXN0dXJlKTsKK30KKwordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZURvdWJsZVRh
cEV2ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludCkKK3sKKyAgICBtX3dl
YlBhZ2VQcm94eS0+ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KHBvaW50LnBvcygpLnRvUG9pbnQo
KSk7Cit9CisKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjp0aW1lckV2ZW50KFFUaW1lckV2
ZW50KiBldikKK3sKKyAgICBpbnQgdGltZXJJZCA9IGV2LT50aW1lcklkKCk7CisgICAgaWYgKHRp
bWVySWQgPT0gbV90cmlwbGVDbGlja1RpbWVyLnRpbWVySWQoKSkKKyAgICAgICAgbV90cmlwbGVD
bGlja1RpbWVyLnN0b3AoKTsKKyAgICBlbHNlCisgICAgICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQo
ZXYpOworfQorCitib29sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlS2V5UHJlc3NFdmVu
dChRS2V5RXZlbnQqIGV2KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2
ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXYpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUtleVJlbGVhc2VFdmVudChRS2V5RXZl
bnQqIGV2KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQoZXYpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopCit7Cisg
ICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJ
c0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c091dEV2
ZW50KFFGb2N1c0V2ZW50KikKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRv
d0lzQWN0aXZlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBRdFdlYlBhZ2VFdmVudEhh
bmRsZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKiBlbmdpbmUpCit7CisgICAgbV9pbnRlcmFjdGlvbkVuZ2luZSA9IGVuZ2luZTsKKyAg
ICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoZW5n
aW5lKTsKKyAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuc2V0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZShlbmdpbmUpOworICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIuc2V0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZShlbmdpbmUpOworfQorCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQpCit7CisjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKKyAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlVG91Y2hFdmVudChOYXRpdmVXZWJUb3Vj
aEV2ZW50KGV2ZW50KSk7CisgICAgZXZlbnQtPmFjY2VwdCgpOworI2Vsc2UKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBldi0+aWdub3JlKCk7CisjZW5kaWYKK30KKwordm9pZCBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI6OnJlc2V0R2VzdHVyZVJlY29nbml6ZXJzKCkKK3sKKyAgICBtX3Bh
bkdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVy
LnJlc2V0KCk7CisgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5yZXNldCgpOworfQorCit2b2lk
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdl
YlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKK3sKKyAgICBpZiAoIW1f
aW50ZXJhY3Rpb25FbmdpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh3YXNFdmVudEhh
bmRsZWQgfHwgZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpUb3VjaENhbmNlbCkgeworICAgICAg
ICByZXNldEdlc3R1cmVSZWNvZ25pemVycygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY29uc3QgUVRvdWNoRXZlbnQqIGV2ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKworICAgIHN3
aXRjaCAoZXYtPnR5cGUoKSkgeworICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgorICAgICAg
ICBBU1NFUlQoIW1faW50ZXJhY3Rpb25FbmdpbmUtPnBhbkdlc3R1cmVBY3RpdmUoKSk7CisgICAg
ICAgIEFTU0VSVCghbV9pbnRlcmFjdGlvbkVuZ2luZS0+cGluY2hHZXN0dXJlQWN0aXZlKCkpOwor
CisgICAgICAgIC8vIFRoZSBpbnRlcmFjdGlvbiBlbmdpbmUgbWlnaHQgc3RpbGwgYmUgYW5pbWF0
aW5nIGtpbmV0aWMgc2Nyb2xsaW5nIG9yIGEgc2NhbGUgYW5pbWF0aW9uCisgICAgICAgIC8vIHN1
Y2ggYXMgZG91YmxlLXRhcCB0byB6b29tIG9yIHRoZSBib3VuY2UgYmFjayBlZmZlY3QuIEEgdG91
Y2ggc3RvcHMgdGhlIGtpbmV0aWMgc2Nyb2xsaW5nCisgICAgICAgIC8vIHdoZXJlIGFzIGl0IGRv
ZXMgbm90IHN0b3AgdGhlIHNjYWxlIGFuaW1hdGlvbi4KKyAgICAgICAgaWYgKG1faW50ZXJhY3Rp
b25FbmdpbmUtPnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICAgICAgbV9pbnRlcmFj
dGlvbkVuZ2luZS0+aW50ZXJydXB0U2Nyb2xsQW5pbWF0aW9uKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKKyAgICAgICAgLy8gVGhlIHNjYWxlIGFuaW1h
dGlvbiBjYW4gb25seSBiZSBpbnRlcnJ1cHRlZCBieSBhIHBpbmNoIGdlc3R1cmUsIHdoaWNoIHdp
bGwgdGhlbiB0YWtlIG92ZXIuCisgICAgICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2Fs
ZUFuaW1hdGlvbkFjdGl2ZSgpICYmIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6
ZWQoKSkKKyAgICAgICAgICAgIG1faW50ZXJhY3Rpb25FbmdpbmUtPmludGVycnVwdFNjYWxlQW5p
bWF0aW9uKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIC8vIElmIHRoZSBzY2FsZSBhbmltYXRpb24gaXMgYWN0aXZlIHdlIGRvbid0
IHBhc3MgdGhlIGV2ZW50IHRvIHRoZSByZWNvZ25pemVycy4gSW4gdGhlIGZ1dHVyZQorICAgIC8v
IHdlIHdvdWxkIHdhbnQgdG8gcXVldWUgdGhlIGV2ZW50IGhlcmUgYW5kIHJlcG9zdCB0aGVuIHdo
ZW4gdGhlIGFuaW1hdGlvbiBlbmRzLgorICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2Fs
ZUFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb252ZXJ0IHRo
ZSBldmVudCB0aW1lc3RhbXAgZnJvbSBzZWNvbmQgdG8gbWlsbGlzZWNvbmQuCisgICAgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nhc3Q8cWludDY0PihldmVudC50aW1lc3Rh
bXAoKSAqIDEwMDApOworICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2LCBl
dmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnJlY29n
bml6ZShldik7CisKKyAgICBpZiAobV9wYW5HZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQo
KSB8fCBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkpCisgICAgICAgIG1f
dGFwR2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY29uc3Qg
UVRvdWNoRXZlbnQqIGV2ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICAgICAgbV90YXBHZXN0
dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB9
Cit9CisKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkaWRGaW5kWm9vbWFibGVBcmVhKGNv
bnN0IEludFBvaW50JiB0YXJnZXQsIGNvbnN0IEludFJlY3QmIGFyZWEpCit7CisgICAgaWYgKCFt
X2ludGVyYWN0aW9uRW5naW5lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogQXMg
dGhlIGZpbmQgbWV0aG9kIG1pZ2h0IG5vdCByZXNwb25kIGltbWVkaWF0ZWx5IGR1cmluZyBsb2Fk
IGV0YywKKyAgICAvLyB3ZSBzaG91bGQgaWdub3JlIGFsbCBidXQgdGhlIGxhdGVzdCByZXF1ZXN0
LgorICAgIG1faW50ZXJhY3Rpb25FbmdpbmUtPnpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoUVBvaW50
Rih0YXJnZXQpLCBRUmVjdEYoYXJlYSkpOworfQorCisjaW5jbHVkZSAibW9jX1F0V2ViUGFnZUV2
ZW50SGFuZGxlci5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGE1OGZmN2IxNGE2NGRjMTIxY2QwMGE5
NjA2N2Q5ZDgxOTFjMjk5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBRdFdlYlBhZ2VFdmVudEhhbmRsZXJfaAorI2RlZmlu
ZSBRdFdlYlBhZ2VFdmVudEhhbmRsZXJfaAorCisjaW5jbHVkZSAiUXRQYW5HZXN0dXJlUmVjb2du
aXplci5oIgorI2luY2x1ZGUgIlF0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIgorI2luY2x1ZGUg
IlF0VGFwR2VzdHVyZVJlY29nbml6ZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNp
bmNsdWRlIDxRQmFzaWNUaW1lcj4KKyNpbmNsdWRlIDxRS2V5RXZlbnQ+CisjaW5jbHVkZSA8UVRv
dWNoRXZlbnQ+CisjaW5jbHVkZSA8V0tQYWdlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK2NsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBR
X09CSkVDVAorCitwdWJsaWM6CisgICAgUXRXZWJQYWdlRXZlbnRIYW5kbGVyKFdLUGFnZVJlZiwg
V2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqID0gMCk7CisgICAgflF0V2ViUGFn
ZUV2ZW50SGFuZGxlcigpOworCisgICAgc3RhdGljIFF0OjpEcm9wQWN0aW9uIGRyYWdPcGVyYXRp
b25Ub0Ryb3BBY3Rpb24odW5zaWduZWQgZHJhZ09wZXJhdGlvbik7CisgICAgc3RhdGljIFF0OjpE
cm9wQWN0aW9ucyBkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9ucyh1bnNpZ25lZCBkcmFnT3BlcmF0
aW9ucyk7CisgICAgc3RhdGljIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRvRHJh
Z09wZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMpOworCisgICAgYm9vbCBoYW5kbGVFdmVudChRRXZl
bnQqKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUqKTsKKworICAgIHZvaWQgaGFuZGxlU2luZ2xlVGFwRXZlbnQoY29u
c3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmKTsKKyAgICB2b2lkIGhhbmRsZURvdWJsZVRhcEV2
ZW50KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7CisKKyAgICB2b2lkIGRpZEZpbmRa
b29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRhcmdldCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgYXJlYSk7CisgICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0
aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsKKyAgICB2b2lkIHJlc2V0
R2VzdHVyZVJlY29nbml6ZXJzKCk7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJQYWdlUHJveHkqIG1f
d2ViUGFnZVByb3h5OworICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogbV9pbnRlcmFj
dGlvbkVuZ2luZTsKKyAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyIG1fcGFuR2VzdHVyZVJlY29n
bml6ZXI7CisgICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyIG1fcGluY2hHZXN0dXJlUmVjb2du
aXplcjsKKyAgICBRdFRhcEdlc3R1cmVSZWNvZ25pemVyIG1fdGFwR2VzdHVyZVJlY29nbml6ZXI7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBoYW5kbGVLZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOwor
ICAgIGJvb2wgaGFuZGxlS2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOworICAgIGJvb2wgaGFu
ZGxlRm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVGb2N1c091dEV2
ZW50KFFGb2N1c0V2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChRTW91c2VF
dmVudCopOworICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7Cisg
ICAgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCopOworICAgIGJvb2wg
aGFuZGxlTW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50KFFXaGVlbEV2ZW50Kik7CisgICAgYm9vbCBoYW5kbGVIb3ZlckxlYXZlRXZl
bnQoUUhvdmVyRXZlbnQqKTsKKyAgICBib29sIGhhbmRsZUhvdmVyTW92ZUV2ZW50KFFIb3ZlckV2
ZW50Kik7CisgICAgYm9vbCBoYW5kbGVEcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqKTsK
KyAgICBib29sIGhhbmRsZURyYWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCopOworICAgIGJv
b2wgaGFuZGxlRHJhZ01vdmVFdmVudChRRHJhZ01vdmVFdmVudCopOworICAgIGJvb2wgaGFuZGxl
RHJvcEV2ZW50KFFEcm9wRXZlbnQqKTsKKworICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVu
dCopOworCisgICAgdm9pZCB0b3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CisKKyAgICBRUG9pbnQg
bV90cmlwbGVDbGljazsKKyAgICBRQmFzaWNUaW1lciBtX3RyaXBsZUNsaWNrVGltZXI7Cit9Owor
CisjZW5kaWYgLyogUXRXZWJQYWdlRXZlbnRIYW5kbGVyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuY3BwCmluZGV4IDRmOWZiNmE5ZWE1ZGY2NTlm
MTA5MTYyZTk3ODg5NzlmZGRlZjdiNWEuLmY3MjJjOGY3OTM1ODdjOWU0MGU0NjVhZmQ5NzAwZWQ3
MWQ0MTI5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBy
b3h5LmNwcApAQCAtNDAsMzMgKzQwLDI2IEBACiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNdXRhYmxlQXJyYXkuaCIK
LSNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiTmF0aXZlV2Vi
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5oIgorI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2Vi
VW5kb0NvbW1hbmQuaCIKICNpbmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRl
ICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVF0LmgiCiAjaW5j
bHVkZSAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgotI2luY2x1ZGUgIldlYkV2ZW50RmFjdG9yeVF0
LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlRdERlc2t0b3AuaCIKICNpbmNsdWRlICJX
S1N0cmluZ1F0LmgiCiAjaW5jbHVkZSAiV0tVUkxRdC5oIgogI2luY2x1ZGUgPFFEcmFnPgogI2lu
Y2x1ZGUgPFFHdWlBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZU1vdXNlRXZl
bnQ+CiAjaW5jbHVkZSA8UUpTRW5naW5lPgogI2luY2x1ZGUgPFFNaW1lRGF0YT4KICNpbmNsdWRl
IDxRU3R5bGVIaW50cz4KLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRVW5kb1N0
YWNrPgogI2luY2x1ZGUgPFF0RGVidWc+CiAjaW5jbHVkZSA8V2ViQ29yZS9DdXJzb3IuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLUGFnZUdyb3VwLmg+CkBAIC05MCw1NSArODMsOSBAQCBQYXNzUmVmUHRyPFdlYkNvbnRl
eHQ+IFF0V2ViUGFnZVByb3h5OjpkZWZhdWx0V0tDb250ZXh0KCkKICAgICByZXR1cm4gc19kZWZh
dWx0Q29udGV4dDsKIH0KIAotc3RhdGljIGlubGluZSBRdDo6RHJvcEFjdGlvbiBkcmFnT3BlcmF0
aW9uVG9Ecm9wQWN0aW9uKHVuc2lnbmVkIGRyYWdPcGVyYXRpb24pCi17Ci0gICAgUXQ6OkRyb3BB
Y3Rpb24gcmVzdWx0ID0gUXQ6Oklnbm9yZUFjdGlvbjsKLSAgICBpZiAoZHJhZ09wZXJhdGlvbiAm
IERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXN1bHQgPSBRdDo6Q29weUFjdGlvbjsKLSAg
ICBlbHNlIGlmIChkcmFnT3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCi0gICAgICAgIHJl
c3VsdCA9IFF0OjpNb3ZlQWN0aW9uOwotICAgIGVsc2UgaWYgKGRyYWdPcGVyYXRpb24gJiBEcmFn
T3BlcmF0aW9uR2VuZXJpYykKLSAgICAgICAgcmVzdWx0ID0gUXQ6Ok1vdmVBY3Rpb247Ci0gICAg
ZWxzZSBpZiAoZHJhZ09wZXJhdGlvbiAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICByZXN1
bHQgPSBRdDo6TGlua0FjdGlvbjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5s
aW5lIFF0OjpEcm9wQWN0aW9ucyBkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9ucyh1bnNpZ25lZCBk
cmFnT3BlcmF0aW9ucykKLXsKLSAgICBRdDo6RHJvcEFjdGlvbnMgcmVzdWx0ID0gUXQ6Oklnbm9y
ZUFjdGlvbjsKLSAgICBpZiAoZHJhZ09wZXJhdGlvbnMgJiBEcmFnT3BlcmF0aW9uQ29weSkKLSAg
ICAgICAgcmVzdWx0IHw9IFF0OjpDb3B5QWN0aW9uOwotICAgIGlmIChkcmFnT3BlcmF0aW9ucyAm
IERyYWdPcGVyYXRpb25Nb3ZlKQotICAgICAgICByZXN1bHQgfD0gUXQ6Ok1vdmVBY3Rpb247Ci0g
ICAgaWYgKGRyYWdPcGVyYXRpb25zICYgRHJhZ09wZXJhdGlvbkdlbmVyaWMpCi0gICAgICAgIHJl
c3VsdCB8PSBRdDo6TW92ZUFjdGlvbjsKLSAgICBpZiAoZHJhZ09wZXJhdGlvbnMgJiBEcmFnT3Bl
cmF0aW9uTGluaykKLSAgICAgICAgcmVzdWx0IHw9IFF0OjpMaW5rQWN0aW9uOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlvblRvRHJhZ09w
ZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMgYWN0aW9ucykKLXsKLSAgICB1bnNpZ25lZCByZXN1bHQg
PSAwOwotICAgIGlmIChhY3Rpb25zICYgUXQ6OkNvcHlBY3Rpb24pCi0gICAgICAgIHJlc3VsdCB8
PSBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICBpZiAoYWN0aW9ucyAmIFF0OjpNb3ZlQWN0aW9uKQot
ICAgICAgICByZXN1bHQgfD0gKERyYWdPcGVyYXRpb25Nb3ZlIHwgRHJhZ09wZXJhdGlvbkdlbmVy
aWMpOwotICAgIGlmIChhY3Rpb25zICYgUXQ6OkxpbmtBY3Rpb24pCi0gICAgICAgIHJlc3VsdCB8
PSBEcmFnT3BlcmF0aW9uTGluazsKLSAgICBpZiAocmVzdWx0ID09IChEcmFnT3BlcmF0aW9uQ29w
eSB8IERyYWdPcGVyYXRpb25Nb3ZlIHwgRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0
aW9uTGluaykpCi0gICAgICAgIHJlc3VsdCA9IERyYWdPcGVyYXRpb25FdmVyeTsKLSAgICByZXR1
cm4gKERyYWdPcGVyYXRpb24pcmVzdWx0OwotfQotCi1RdFdlYlBhZ2VQcm94eTo6UXRXZWJQYWdl
UHJveHkoUVF1aWNrV2ViUGFnZSogcW1sV2ViUGFnZSwgUVF1aWNrV2ViVmlldyogcW1sV2ViVmll
dywgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQor
UXRXZWJQYWdlUHJveHk6OlF0V2ViUGFnZVByb3h5KFFRdWlja1dlYlBhZ2UqIHFtbFdlYlBhZ2Us
IFFRdWlja1dlYlZpZXcqIHFtbFdlYlZpZXcsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiAgICAgOiBtX3FtbFdlYlBhZ2UocW1sV2ViUGFnZSkK
ICAgICAsIG1fcW1sV2ViVmlldyhxbWxXZWJWaWV3KQotICAgICwgbV9pbnRlcmFjdGlvbkVuZ2lu
ZSh2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQotICAgICwgbV9wYW5HZXN0dXJlUmVjb2duaXpl
cih2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKQotICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25p
emVyKHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUpCi0gICAgLCBtX3RhcEdlc3R1cmVSZWNvZ25p
emVyKHZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUsIHRoaXMpCiAgICAgLCBtX2NvbnRleHQoY29u
dGV4dFJlZiA/IHRvSW1wbChjb250ZXh0UmVmKSA6IGRlZmF1bHRXS0NvbnRleHQoKSkKICAgICAs
IG1fdW5kb1N0YWNrKGFkb3B0UHRyKG5ldyBRVW5kb1N0YWNrKHRoaXMpKSkKICAgICAsIG1fbmF2
aWdhdG9yUXRPYmplY3RFbmFibGVkKGZhbHNlKQpAQCAtMTQ5LDggKzk2LDkgQEAgUXRXZWJQYWdl
UHJveHk6OlF0V2ViUGFnZVByb3h5KFFRdWlja1dlYlBhZ2UqIHFtbFdlYlBhZ2UsIFFRdWlja1dl
YlZpZXcqIHFtbFdlYlYKICAgICAgICAgc19kZWZhdWx0UGFnZVByb3h5Q291bnQrKzsKIH0KIAot
dm9pZCBRdFdlYlBhZ2VQcm94eTo6aW5pdCgpCit2b2lkIFF0V2ViUGFnZVByb3h5Ojppbml0KFF0
V2ViUGFnZUV2ZW50SGFuZGxlciogcXRFdmVudEhhbmRsZXIpCiB7CisgICAgbV9xdEV2ZW50SGFu
ZGxlciA9IHF0RXZlbnRIYW5kbGVyOwogICAgIG1fd2ViUGFnZVByb3h5LT5pbml0aWFsaXplV2Vi
UGFnZSgpOwogfQogCkBAIC0xNjksMTgzICsxMTcsNiBAQCBRdFdlYlBhZ2VQcm94eTo6flF0V2Vi
UGFnZVByb3h5KCkKICAgICBkZWxldGUgbV9oaXN0b3J5OwogfQogCi1ib29sIFF0V2ViUGFnZVBy
b3h5OjpoYW5kbGVFdmVudChRRXZlbnQqIGV2KQotewotICAgIHN3aXRjaCAoZXYtPnR5cGUoKSkg
ewotICAgIGNhc2UgUUV2ZW50OjpNb3VzZU1vdmU6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNb3Vz
ZU1vdmVFdmVudChyZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNl
IFFFdmVudDo6TW91c2VCdXR0b25QcmVzczoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1vdXNlUHJl
c3NFdmVudChyZWludGVycHJldF9jYXN0PFFNb3VzZUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFF
dmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgotICAgICAgICByZXR1cm4gaGFuZGxlTW91c2VSZWxl
YXNlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBR
RXZlbnQ6Ok1vdXNlQnV0dG9uRGJsQ2xpY2s6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNb3VzZURv
dWJsZUNsaWNrRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRTW91c2VFdmVudCo+KGV2KSk7Ci0gICAg
Y2FzZSBRRXZlbnQ6OldoZWVsOgotICAgICAgICByZXR1cm4gaGFuZGxlV2hlZWxFdmVudChyZWlu
dGVycHJldF9jYXN0PFFXaGVlbEV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJM
ZWF2ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUhvdmVyTGVhdmVFdmVudChyZWludGVycHJldF9j
YXN0PFFIb3ZlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6SG92ZXJFbnRlcjogLy8g
RmFsbC10aHJvdWdoLCBmb3IgV2ViS2l0IHRoZSBkaXN0aW5jdGlvbiBkb2Vzbid0IG1hdHRlci4K
LSAgICBjYXNlIFFFdmVudDo6SG92ZXJNb3ZlOgotICAgICAgICByZXR1cm4gaGFuZGxlSG92ZXJN
b3ZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRSG92ZXJFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBR
RXZlbnQ6OkRyYWdFbnRlcjoKLSAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdFbnRlckV2ZW50KHJl
aW50ZXJwcmV0X2Nhc3Q8UURyYWdFbnRlckV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVudDo6
RHJhZ0xlYXZlOgotICAgICAgICByZXR1cm4gaGFuZGxlRHJhZ0xlYXZlRXZlbnQocmVpbnRlcnBy
ZXRfY2FzdDxRRHJhZ0xlYXZlRXZlbnQqPihldikpOwotICAgIGNhc2UgUUV2ZW50OjpEcmFnTW92
ZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZURyYWdNb3ZlRXZlbnQocmVpbnRlcnByZXRfY2FzdDxR
RHJhZ01vdmVFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkRyb3A6Ci0gICAgICAgIHJl
dHVybiBoYW5kbGVEcm9wRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRHJvcEV2ZW50Kj4oZXYpKTsK
LSAgICBjYXNlIFFFdmVudDo6S2V5UHJlc3M6Ci0gICAgICAgIHJldHVybiBoYW5kbGVLZXlQcmVz
c0V2ZW50KHJlaW50ZXJwcmV0X2Nhc3Q8UUtleUV2ZW50Kj4oZXYpKTsKLSAgICBjYXNlIFFFdmVu
dDo6S2V5UmVsZWFzZToKLSAgICAgICAgcmV0dXJuIGhhbmRsZUtleVJlbGVhc2VFdmVudChyZWlu
dGVycHJldF9jYXN0PFFLZXlFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkZvY3VzSW46
Ci0gICAgICAgIHJldHVybiBoYW5kbGVGb2N1c0luRXZlbnQocmVpbnRlcnByZXRfY2FzdDxRRm9j
dXNFdmVudCo+KGV2KSk7Ci0gICAgY2FzZSBRRXZlbnQ6OkZvY3VzT3V0OgotICAgICAgICByZXR1
cm4gaGFuZGxlRm9jdXNPdXRFdmVudChyZWludGVycHJldF9jYXN0PFFGb2N1c0V2ZW50Kj4oZXYp
KTsKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hF
bmQ6Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgotICAgICAgICB0b3VjaEV2ZW50KHN0
YXRpY19jYXN0PFFUb3VjaEV2ZW50Kj4oZXYpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IE1vdmUgYWxsIGNvbW1vbiBldmVudCBoYW5kbGluZyBoZXJlLgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQotewotICAgIC8vIEZvciBzb21lIHJlYXNvbiBtb3Vz
ZSBwcmVzcyByZXN1bHRzIGluIG1vdXNlIGhvdmVyICh3aGljaCBpcwotICAgIC8vIGNvbnZlcnRl
ZCB0byBtb3VzZSBtb3ZlIGZvciBXZWJLaXQpLiBXZSBpZ25vcmUgdGhlc2UgaG92ZXIKLSAgICAv
LyBldmVudHMgYnkgY29tcGFyaW5nIGxhc3RQb3Mgd2l0aCBuZXdQb3MuCi0gICAgLy8gTk9URTog
bGFzdFBvcyBmcm9tIHRoZSBldmVudCBhbHdheXMgY29tZXMgZW1wdHksIHNvIHdlIHdvcmsKLSAg
ICAvLyBhcm91bmQgdGhhdCBoZXJlLgotICAgIHN0YXRpYyBRUG9pbnRGIGxhc3RQb3MgPSBRUG9p
bnRGKCk7Ci0gICAgaWYgKGxhc3RQb3MgPT0gZXYtPnBvcygpKQotICAgICAgICByZXR1cm4gZXYt
PmlzQWNjZXB0ZWQoKTsKLSAgICBsYXN0UG9zID0gZXYtPnBvcygpOwotCi0gICAgbV93ZWJQYWdl
UHJveHktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldiwgLypldmVudENs
aWNrQ291bnQ9Ki8wKSk7Ci0KLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKLX0KLQotYm9v
bCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldikK
LXsKLSAgICBpZiAobV90cmlwbGVDbGlja1RpbWVyLmlzQWN0aXZlKCkgJiYgKGV2LT5wb3MoKSAt
IG1fdHJpcGxlQ2xpY2spLm1hbmhhdHRhbkxlbmd0aCgpIDwgcUFwcC0+c3R5bGVIaW50cygpLT5z
dGFydERyYWdEaXN0YW5jZSgpKSB7Ci0gICAgICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3Vz
ZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMykpOwot
ICAgICAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKLSAgICB9Ci0KLSAgICBtX3dlYlBhZ2VQ
cm94eS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVXZWJNb3VzZUV2ZW50KGV2LCAvKmV2ZW50Q2xp
Y2tDb3VudD0qLzEpKTsKLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0ZWQoKTsKLX0KLQotYm9vbCBR
dFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQot
ewotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2ZW50KE5hdGl2ZVdlYk1vdXNlRXZl
bnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMCkpOwotICAgIHJldHVybiBldi0+aXNBY2NlcHRl
ZCgpOwotfQotCi1ib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZl
bnQoUU1vdXNlRXZlbnQqIGV2KQotewotICAgIG1fd2ViUGFnZVByb3h5LT5oYW5kbGVNb3VzZUV2
ZW50KE5hdGl2ZVdlYk1vdXNlRXZlbnQoZXYsIC8qZXZlbnRDbGlja0NvdW50PSovMikpOwotCi0g
ICAgbV90cmlwbGVDbGlja1RpbWVyLnN0YXJ0KHFBcHAtPnN0eWxlSGludHMoKS0+bW91c2VEb3Vi
bGVDbGlja0ludGVydmFsKCksIHRoaXMpOwotICAgIG1fdHJpcGxlQ2xpY2sgPSBldi0+bG9jYWxQ
b3MoKS50b1BvaW50KCk7Ci0gICAgcmV0dXJuIGV2LT5pc0FjY2VwdGVkKCk7Ci19Ci0KLWJvb2wg
UXRXZWJQYWdlUHJveHk6OmhhbmRsZVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGV2KQotewotICAg
IG1fd2ViUGFnZVByb3h5LT5oYW5kbGVXaGVlbEV2ZW50KE5hdGl2ZVdlYldoZWVsRXZlbnQoZXYp
KTsKLSAgICAvLyBGSVhNRTogSGFuZGxlIHdoZXRoZXIgdGhlIHBhZ2UgdXNlZCB0aGUgd2hlZWwg
ZXZlbnQgb3Igbm90LgotICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lKQotICAgICAgICBtX2lu
dGVyYWN0aW9uRW5naW5lLT53aGVlbEV2ZW50KGV2KTsKLSAgICByZXR1cm4gZXYtPmlzQWNjZXB0
ZWQoKTsKLX0KLQotYm9vbCBRdFdlYlBhZ2VQcm94eTo6aGFuZGxlSG92ZXJMZWF2ZUV2ZW50KFFI
b3ZlckV2ZW50KiBldikKLXsKLSAgICAvLyBUbyBnZXQgdGhlIGNvcnJlY3QgYmVoYXZpb3Igb2Yg
bW91c2VvdXQsIHdlIG5lZWQgdG8gdHVybiB0aGUgTGVhdmUgZXZlbnQgb2Ygb3VyIHdlYnZpZXcg
aW50byBhIG1vdXNlIG1vdmUKLSAgICAvLyB0byBhIHZlcnkgZmFyIHJlZ2lvbi4KLSAgICBRSG92
ZXJFdmVudCBmYWtlRXZlbnQoUUV2ZW50OjpIb3Zlck1vdmUsIFFQb2ludChJTlRfTUlOLCBJTlRf
TUlOKSwgZXYtPm9sZFBvcygpKTsKLSAgICByZXR1cm4gaGFuZGxlSG92ZXJNb3ZlRXZlbnQoJmZh
a2VFdmVudCk7Ci19Ci0KLWJvb2wgUXRXZWJQYWdlUHJveHk6OmhhbmRsZUhvdmVyTW92ZUV2ZW50
KFFIb3ZlckV2ZW50KiBldikKLXsKLSAgICBRTW91c2VFdmVudCBtZShRRXZlbnQ6Ok1vdXNlTW92
ZSwgZXYtPnBvcygpLCBRdDo6Tm9CdXR0b24sIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIp
OwotICAgIG1lLnNldEFjY2VwdGVkKGV2LT5pc0FjY2VwdGVkKCkpOwotCi0gICAgcmV0dXJuIGhh
bmRsZU1vdXNlTW92ZUV2ZW50KCZtZSk7Ci19Ci0KLWJvb2wgUXRXZWJQYWdlUHJveHk6OmhhbmRs
ZURyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCogZXYpCi17Ci0gICAgbV93ZWJQYWdlUHJv
eHktPnJlc2V0RHJhZ09wZXJhdGlvbigpOwotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBR
Q3Vyc29yOjpwb3MoKQotICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBldi0+
cG9zKCksIFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGV2LT5wb3Nz
aWJsZUFjdGlvbnMoKSkpOwotICAgIG1fd2ViUGFnZVByb3h5LT5kcmFnRW50ZXJlZCgmZHJhZ0Rh
dGEpOwotICAgIGV2LT5hY2NlcHRQcm9wb3NlZEFjdGlvbigpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVEcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZl
RXZlbnQqIGV2KQotewotICAgIGJvb2wgYWNjZXB0ZWQgPSBldi0+aXNBY2NlcHRlZCgpOwotCi0g
ICAgLy8gRklYTUU6IFNob3VsZCBub3QgdXNlIFFDdXJzb3I6OnBvcygpCi0gICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoMCwgSW50UG9pbnQoKSwgUUN1cnNvcjo6cG9zKCksIERyYWdPcGVyYXRpb25Ob25l
KTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOwotICAgIG1fd2Vi
UGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKLQotICAgIGV2LT5zZXRBY2NlcHRlZChh
Y2NlcHRlZCk7Ci0gICAgcmV0dXJuIGFjY2VwdGVkOwotfQotCi1ib29sIFF0V2ViUGFnZVByb3h5
OjpoYW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50KiBldikKLXsKLSAgICBib29sIGFj
Y2VwdGVkID0gZXYtPmlzQWNjZXB0ZWQoKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVz
ZSBRQ3Vyc29yOjpwb3MoKQotICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBl
di0+cG9zKCksIFFDdXJzb3I6OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGV2LT5w
b3NzaWJsZUFjdGlvbnMoKSkpOwotICAgIG1fd2ViUGFnZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJh
Z0RhdGEpOwotICAgIGV2LT5zZXREcm9wQWN0aW9uKGRyYWdPcGVyYXRpb25Ub0Ryb3BBY3Rpb24o
bV93ZWJQYWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uKSk7Ci0gICAgaWYgKG1fd2Vi
UGFnZVByb3h5LT5kcmFnU2Vzc2lvbigpLm9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkK
LSAgICAgICAgZXYtPmFjY2VwdCgpOwotCi0gICAgZXYtPnNldEFjY2VwdGVkKGFjY2VwdGVkKTsK
LSAgICByZXR1cm4gYWNjZXB0ZWQ7Ci19Ci0KLWJvb2wgUXRXZWJQYWdlUHJveHk6OmhhbmRsZURy
b3BFdmVudChRRHJvcEV2ZW50KiBldikKLXsKLSAgICBib29sIGFjY2VwdGVkID0gZXYtPmlzQWNj
ZXB0ZWQoKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IHVzZSBRQ3Vyc29yOjpwb3MoKQot
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGV2LT5taW1lRGF0YSgpLCBldi0+cG9zKCksIFFDdXJzb3I6
OnBvcygpLCBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGV2LT5wb3NzaWJsZUFjdGlvbnMoKSkp
OwotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7Ci0gICAgbV93ZWJQYWdlUHJv
eHktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSk7Ci0gICAgZXYtPnNl
dERyb3BBY3Rpb24oZHJhZ09wZXJhdGlvblRvRHJvcEFjdGlvbihtX3dlYlBhZ2VQcm94eS0+ZHJh
Z1Nlc3Npb24oKS5vcGVyYXRpb24pKTsKLSAgICBldi0+YWNjZXB0KCk7Ci0KLSAgICBldi0+c2V0
QWNjZXB0ZWQoYWNjZXB0ZWQpOwotICAgIHJldHVybiBhY2NlcHRlZDsKLX0KLQotdm9pZCBRdFdl
YlBhZ2VQcm94eTo6aGFuZGxlU2luZ2xlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNo
UG9pbnQmIHBvaW50KQotewotICAgIFdlYkdlc3R1cmVFdmVudCBnZXN0dXJlKFdlYkV2ZW50OjpH
ZXN0dXJlU2luZ2xlVGFwLCBwb2ludC5wb3MoKS50b1BvaW50KCksIHBvaW50LnNjcmVlblBvcygp
LnRvUG9pbnQoKSwgV2ViRXZlbnQ6Ok1vZGlmaWVycygwKSwgMCk7Ci0gICAgbV93ZWJQYWdlUHJv
eHktPmhhbmRsZUdlc3R1cmVFdmVudChnZXN0dXJlKTsKLX0KLQotdm9pZCBRdFdlYlBhZ2VQcm94
eTo6aGFuZGxlRG91YmxlVGFwRXZlbnQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBv
aW50KQotewotICAgIG1fd2ViUGFnZVByb3h5LT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQocG9p
bnQucG9zKCkudG9Qb2ludCgpKTsKLX0KLQogdm9pZCBRdFdlYlBhZ2VQcm94eTo6c2hvd0NvbnRl
eHRNZW51KFFTaGFyZWRQb2ludGVyPFFNZW51PiBtZW51KQogewogICAgIC8vIFJlbW92ZSB0aGUg
YWN0aXZlIG1lbnUgaW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0d2ljZS4KQEAgLTM3
OCwzOSArMTQ5LDYgQEAgdm9pZCBRdFdlYlBhZ2VQcm94eTo6aGlkZUNvbnRleHRNZW51KCkKICAg
ICAgICAgYWN0aXZlTWVudS0+aGlkZSgpOwogfQogCi12b2lkIFF0V2ViUGFnZVByb3h5Ojp0aW1l
ckV2ZW50KFFUaW1lckV2ZW50KiBldikKLXsKLSAgICBpbnQgdGltZXJJZCA9IGV2LT50aW1lcklk
KCk7Ci0gICAgaWYgKHRpbWVySWQgPT0gbV90cmlwbGVDbGlja1RpbWVyLnRpbWVySWQoKSkKLSAg
ICAgICAgbV90cmlwbGVDbGlja1RpbWVyLnN0b3AoKTsKLSAgICBlbHNlCi0gICAgICAgIFFPYmpl
Y3Q6OnRpbWVyRXZlbnQoZXYpOwotfQotCi1ib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVLZXlQ
cmVzc0V2ZW50KFFLZXlFdmVudCogZXYpCi17Ci0gICAgbV93ZWJQYWdlUHJveHktPmhhbmRsZUtl
eWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldikpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFF0V2ViUGFnZVByb3h5OjpoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2
ZW50KiBldikKLXsKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGV2KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUXRX
ZWJQYWdlUHJveHk6OmhhbmRsZUZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopCi17Ci0gICAgbV93
ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3Vz
ZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgUXRXZWJQYWdlUHJveHk6OmhhbmRsZUZvY3VzT3V0RXZlbnQoUUZvY3VzRXZl
bnQqKQotewotICAgIG1fd2ViUGFnZVByb3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVBy
b3h5OjpWaWV3SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIFF0V2ViUGFnZVByb3h5OjpzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3JhcnkgZml4IHVudGlsIHdlIGdldCBjdXJzb3Igc3VwcG9ydCBpbiBRTUwgaXRlbXMuCkBA
IC01ODYsMTIgKzMyNCw4IEBAIFdLUGFnZVJlZiBRdFdlYlBhZ2VQcm94eTo6cGFnZVJlZigpIGNv
bnN0CiAKIHZvaWQgUXRXZWJQYWdlUHJveHk6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgSW50
UG9pbnQmIHRhcmdldCwgY29uc3QgSW50UmVjdCYgYXJlYSkKIHsKLSAgICBpZiAoIW1faW50ZXJh
Y3Rpb25FbmdpbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBBcyB0aGUgZmlu
ZCBtZXRob2QgbWlnaHQgbm90IHJlc3BvbmQgaW1tZWRpYXRlbHkgZHVyaW5nIGxvYWQgZXRjLAot
ICAgIC8vIHdlIHNob3VsZCBpZ25vcmUgYWxsIGJ1dCB0aGUgbGF0ZXN0IHJlcXVlc3QuCi0gICAg
bV9pbnRlcmFjdGlvbkVuZ2luZS0+em9vbVRvQXJlYUdlc3R1cmVFbmRlZChRUG9pbnRGKHRhcmdl
dCksIFFSZWN0RihhcmVhKSk7CisgICAgQVNTRVJUKG1fcXRFdmVudEhhbmRsZXIpOworICAgIG1f
cXRFdmVudEhhbmRsZXItPmRpZEZpbmRab29tYWJsZUFyZWEodGFyZ2V0LCBhcmVhKTsKIH0KIAog
dm9pZCBRdFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNjYxLDkgKzM5NSw5IEBAIHZvaWQgUXRXZWJQ
YWdlUHJveHk6OmRpZFJlbGF1bmNoUHJvY2VzcygpCiB2b2lkIFF0V2ViUGFnZVByb3h5Ojpwcm9j
ZXNzRGlkQ3Jhc2goKQogewogICAgIHVwZGF0ZU5hdmlnYXRpb25TdGF0ZSgpOwotICAgIG1fcGFu
R2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKLSAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIu
cmVzZXQoKTsKLSAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisKKyAgICBBU1NF
UlQobV9xdEV2ZW50SGFuZGxlcik7CisgICAgbV9xdEV2ZW50SGFuZGxlci0+cmVzZXRHZXN0dXJl
UmVjb2duaXplcnMoKTsKIAogICAgIFdlYkNvcmU6OktVUkwgdXJsKFdlYkNvcmU6OlBhcnNlZFVS
TFN0cmluZywgbV93ZWJQYWdlUHJveHktPnVybEF0UHJvY2Vzc0V4aXQoKSk7CiAgICAgcVdhcm5p
bmcoIldBUk5JTkc6IFRoZSB3ZWIgcHJvY2VzcyBleHBlcmllbmNlZCBhIGNyYXNoIG9uICclcycu
IiwgcVByaW50YWJsZShRVXJsKHVybCkudG9TdHJpbmcoUVVybDo6UmVtb3ZlVXNlckluZm8pKSk7
CkBAIC03MDEsMTQgKzQzNSw2IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OnNldE5hdmlnYXRvclF0
T2JqZWN0RW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9jb250ZXh0LT5wb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIGJvZHkuZ2V0KCkpOwogfQogCi12b2lkIFF0V2Vi
UGFnZVByb3h5OjpzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZSogZW5naW5lKQotewotICAgIG1faW50ZXJhY3Rpb25FbmdpbmUgPSBlbmdpbmU7
Ci0gICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KGVuZ2luZSk7Ci0gICAgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLnNldFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUoZW5naW5lKTsKLSAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnNldFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUoZW5naW5lKTsKLX0KLQogdm9pZCBRdFdlYlBhZ2VQcm94eTo6
cG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFFTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgc3RhdGljIFN0cmluZyBtZXNzYWdlTmFtZSgiTWVzc2FnZVRvTmF2aWdhdG9yUXRPYmpl
Y3QiKTsKQEAgLTc5Niw3ICs1MjIsNyBAQCB2b2lkIFF0V2ViUGFnZVByb3h5OjpzdGFydERyYWco
Y29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYQogCiAgICAg
RHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uTWFzayA9IGRyYWdEYXRhLmRyYWdnaW5nU291cmNl
T3BlcmF0aW9uTWFzaygpOwogICAgIFFNaW1lRGF0YSogbWltZURhdGEgPSBjb25zdF9jYXN0PFFN
aW1lRGF0YSo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKLSAgICBRdDo6RHJvcEFjdGlvbnMg
c3VwcG9ydGVkRHJvcEFjdGlvbnMgPSBkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9ucyhkcmFnT3Bl
cmF0aW9uTWFzayk7CisgICAgUXQ6OkRyb3BBY3Rpb25zIHN1cHBvcnRlZERyb3BBY3Rpb25zID0g
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkcmFnT3BlcmF0aW9uVG9Ecm9wQWN0aW9ucyhkcmFnT3Bl
cmF0aW9uTWFzayk7CiAKICAgICBRUG9pbnQgY2xpZW50UG9zaXRpb247CiAgICAgUVBvaW50IGds
b2JhbFBvc2l0aW9uOwpAQCAtODExLDcgKzUzNyw3IEBAIHZvaWQgUXRXZWJQYWdlUHJveHk6OnN0
YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hh
CiAgICAgICAgIGNsaWVudFBvc2l0aW9uID0gd2luZG93LT5tYXBGcm9tR2xvYmFsKGdsb2JhbFBv
c2l0aW9uKTsKICAgICB9CiAKLSAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhZ0VuZGVkKGNsaWVudFBv
c2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJvcEFjdGlvblRvRHJhZ09wZXJhdGlvbihhY3R1YWxE
cm9wQWN0aW9uKSk7CisgICAgbV93ZWJQYWdlUHJveHktPmRyYWdFbmRlZChjbGllbnRQb3NpdGlv
biwgZ2xvYmFsUG9zaXRpb24sIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZHJvcEFjdGlvblRvRHJh
Z09wZXJhdGlvbihhY3R1YWxEcm9wQWN0aW9uKSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlUHJveHk6
OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKQEAgLTg1Miw1
NCArNTc4LDggQEAgdm9pZCBRdFdlYlBhZ2VQcm94eTo6cmVuZGVyVG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2YKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQogdm9pZCBRdFdlYlBhZ2VQcm94eTo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2
ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKLSAgICBpZiAo
IW1faW50ZXJhY3Rpb25FbmdpbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh3YXNFdmVu
dEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpUb3VjaENhbmNlbCkgewotICAg
ICAgICBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7Ci0gICAgICAgIG1fcGluY2hHZXN0
dXJlUmVjb2duaXplci5yZXNldCgpOwotICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJl
c2V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBRVG91Y2hFdmVudCog
ZXYgPSBldmVudC5uYXRpdmVFdmVudCgpOwotCi0gICAgc3dpdGNoIChldi0+dHlwZSgpKSB7Ci0g
ICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAgICAgIEFTU0VSVCghbV9pbnRlcmFjdGlv
bkVuZ2luZS0+cGFuR2VzdHVyZUFjdGl2ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFtX2ludGVyYWN0
aW9uRW5naW5lLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7Ci0KLSAgICAgICAgLy8gVGhlIGludGVy
YWN0aW9uIGVuZ2luZSBtaWdodCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcg
b3IgYSBzY2FsZSBhbmltYXRpb24KLSAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpv
b20gb3IgdGhlIGJvdW5jZSBiYWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBz
Y3JvbGxpbmcKLSAgICAgICAgLy8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUg
YW5pbWF0aW9uLgotICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2Nyb2xsQW5pbWF0
aW9uQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRT
Y3JvbGxBbmltYXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNo
VXBkYXRlOgotICAgICAgICAvLyBUaGUgc2NhbGUgYW5pbWF0aW9uIGNhbiBvbmx5IGJlIGludGVy
cnVwdGVkIGJ5IGEgcGluY2ggZ2VzdHVyZSwgd2hpY2ggd2lsbCB0aGVuIHRha2Ugb3Zlci4KLSAg
ICAgICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgJiYg
bV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQotICAgICAgICAgICAgbV9p
bnRlcmFjdGlvbkVuZ2luZS0+aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhl
IHNjYWxlIGFuaW1hdGlvbiBpcyBhY3RpdmUgd2UgZG9uJ3QgcGFzcyB0aGUgZXZlbnQgdG8gdGhl
IHJlY29nbml6ZXJzLiBJbiB0aGUgZnV0dXJlCi0gICAgLy8gd2Ugd291bGQgd2FudCB0byBxdWV1
ZSB0aGUgZXZlbnQgaGVyZSBhbmQgcmVwb3N0IHRoZW4gd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMu
Ci0gICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9t
IHNlY29uZCB0byBtaWxsaXNlY29uZC4KLSAgICBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMg
PSBzdGF0aWNfY2FzdDxxaW50NjQ+KGV2ZW50LnRpbWVzdGFtcCgpICogMTAwMCk7Ci0gICAgbV9w
YW5HZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYsIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIucmVjb2duaXplKGV2KTsKLQotICAgIGlmICht
X3Bhbkdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpIHx8IG1fcGluY2hHZXN0dXJlUmVj
b2duaXplci5pc1JlY29nbml6ZWQoKSkKLSAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5y
ZXNldCgpOwotICAgIGVsc2UgewotICAgICAgICBjb25zdCBRVG91Y2hFdmVudCogZXYgPSBldmVu
dC5uYXRpdmVFdmVudCgpOwotICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlY29nbml6
ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIH0KKyAgICBBU1NFUlQobV9xdEV2ZW50
SGFuZGxlcik7CisgICAgbV9xdEV2ZW50SGFuZGxlci0+ZG9uZVdpdGhUb3VjaEV2ZW50KGV2ZW50
LCB3YXNFdmVudEhhbmRsZWQpOwogfQogI2VuZGlmCiAKQEAgLTkyMywyMCArNjAzLDQgQEAgdm9p
ZCBRdFdlYlBhZ2VQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihj
b25zdCBRUG9pbnRGJiB0cmFqZWMKICAgICBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsK
IH0KIAotdm9pZCBRdFdlYlBhZ2VQcm94eTo6dG91Y2hFdmVudChRVG91Y2hFdmVudCogZXZlbnQp
Ci17Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBtX3dlYlBhZ2VQcm94eS0+aGFuZGxl
VG91Y2hFdmVudChOYXRpdmVXZWJUb3VjaEV2ZW50KGV2ZW50KSk7Ci0gICAgZXZlbnQtPmFjY2Vw
dCgpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBldi0+aWdub3JlKCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBRdFdlYlBhZ2VQcm94eTo6ZmluZFpvb21hYmxlQXJlYUZvclBv
aW50KGNvbnN0IFFQb2ludCYgcG9pbnQpCi17Ci0gICAgbV93ZWJQYWdlUHJveHktPmZpbmRab29t
YWJsZUFyZWFGb3JQb2ludChwb2ludCk7Ci19Ci0KICNpbmNsdWRlICJtb2NfUXRXZWJQYWdlUHJv
eHkuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaApp
bmRleCBiMDRlZTBlYjNkNTEwYTJhMjk0YTM5ZDUwNjlmODNhZjJjOWVhN2E0Li41NzhkZDc4NDkz
MTgzNDVmN2IyZTk0MDJmNTVhMjk0M2Y3ZWM0MTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUHJveHkuaApAQCAtMjUsMTggKzI1LDEyIEBACiAjaW5jbHVkZSAi
TGF5ZXJUcmVlQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKICNpbmNsdWRlICJR
dERvd25sb2FkTWFuYWdlci5oIgotI2luY2x1ZGUgIlF0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCIK
LSNpbmNsdWRlICJRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKLSNpbmNsdWRlICJRdFRhcEdl
c3R1cmVSZWNvZ25pemVyLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVk
ZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPFFC
YXNpY1RpbWVyPgogI2luY2x1ZGUgPFFHcmFwaGljc1ZpZXc+Ci0jaW5jbHVkZSA8UUtleUV2ZW50
PgotI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgogI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFFT
aGFyZWRQb2ludGVyPgogCkBAIC00NCw2ICszOCw3IEBAIFFUX0JFR0lOX05BTUVTUEFDRQogY2xh
c3MgUVVuZG9TdGFjazsKIFFUX0VORF9OQU1FU1BBQ0UKIAorY2xhc3MgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOwogY2xhc3MgUXRXZWJFcnJvcjsKIGNsYXNzIFFXZWJQcmVmZXJlbmNlczsKIGNsYXNz
IFFXS0hpc3Rvcnk7CkBAIC01Miw4ICs0Nyw2IEBAIGNsYXNzIFFRdWlja1dlYlZpZXc7CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLVdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvcEFjdGlv
blRvRHJhZ09wZXJhdGlvbihRdDo6RHJvcEFjdGlvbnMgYWN0aW9ucyk7Ci0KIC8vIEZJWE1FOiBu
ZWVkcyBmb2N1cyBpbi9vdXQsIHdpbmRvdyBhY3RpdmF0aW9uLCBzdXBwb3J0IHRocm91Z2ggdmll
d1N0YXRlRGlkQ2hhbmdlKCkuCiBjbGFzcyBRdFdlYlBhZ2VQcm94eSA6IHB1YmxpYyBRT2JqZWN0
LCBXZWJLaXQ6OlBhZ2VDbGllbnQgewogICAgIFFfT0JKRUNUCkBAIC03MywxMyArNjYsMTEgQEAg
cHVibGljOgogICAgICAgICBXZWJBY3Rpb25Db3VudAogICAgIH07CiAKLSAgICBRdFdlYlBhZ2VQ
cm94eShRUXVpY2tXZWJQYWdlKiwgUVF1aWNrV2ViVmlldyosIFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiA9IDAsIFdLQ29udGV4dFJlZiA9IDAsIFdLUGFnZUdyb3VwUmVmID0g
MCk7CisgICAgUXRXZWJQYWdlUHJveHkoUVF1aWNrV2ViUGFnZSosIFFRdWlja1dlYlZpZXcqLCBX
S0NvbnRleHRSZWYgPSAwLCBXS1BhZ2VHcm91cFJlZiA9IDApOwogICAgIH5RdFdlYlBhZ2VQcm94
eSgpOwogCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURy
YXdpbmdBcmVhUHJveHkoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChRRXZlbnQq
KTsKLQogICAgIC8vIFBhZ2VDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlz
cGxheShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BsYXlW
aWV3KCk7CkBAIC0xNjYsOCArMTU3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmF2aWdhdG9y
UXRPYmplY3RFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgbmF2aWdhdG9yUXRPYmplY3RFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7IH0KIAotICAgIHZv
aWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUqKTsKLQogICAgIHZvaWQgcG9zdE1lc3NhZ2VUb05hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFFT
dHJpbmcmKTsKIAogICAgIHFyZWFsIHRleHRab29tRmFjdG9yKCkgY29uc3Q7CkBAIC0xNzgsNyAr
MTY3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2Fs
ZShjb25zdCBRUmVjdEYmLCBmbG9hdCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IFFQb2ludEYmKTsKLSAgICB2b2lkIGZpbmRab29tYWJsZUFy
ZWFGb3JQb2ludChjb25zdCBRUG9pbnQmKTsKICAgICB2b2lkIHJlbmRlclRvQ3VycmVudEdMQ29u
dGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0KTsKIAogICAg
IFFXS0hpc3RvcnkqIGhpc3RvcnkoKSBjb25zdDsKQEAgLTE4OSwxNCArMTc3LDEzIEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5
Kik7Ci0gICAgdm9pZCBpbml0KCk7Ci0KLSAgICB2b2lkIGhhbmRsZVNpbmdsZVRhcEV2ZW50KGNv
bnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7Ci0gICAgdm9pZCBoYW5kbGVEb3VibGVUYXBF
dmVudChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYpOworICAgIHZvaWQgaW5pdChRdFdl
YlBhZ2VFdmVudEhhbmRsZXIqKTsKIAogICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KFFTaGFyZWRQ
b2ludGVyPFFNZW51Pik7CiAgICAgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKIAorICAgIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCkgeyByZXR1cm4gbV9xdEV2ZW50SGFuZGxl
cjsgfQorCiBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIGRpZFJlY2VpdmVEb3dubG9hZFJlc3Bv
bnNlKFFXZWJEb3dubG9hZEl0ZW0qIGRvd25sb2FkSXRlbSk7CiAKQEAgLTIwOCwzNiArMTk1LDEy
IEBAIHByb3RlY3RlZDoKICAgICBRUXVpY2tXZWJQYWdlKiBtX3FtbFdlYlBhZ2U7CiAgICAgUVF1
aWNrV2ViVmlldyogbV9xbWxXZWJWaWV3OwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94
eT4gbV93ZWJQYWdlUHJveHk7Ci0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBtX2lu
dGVyYWN0aW9uRW5naW5lOwotICAgIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIgbV9wYW5HZXN0dXJl
UmVjb2duaXplcjsKLSAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIgbV9waW5jaEdlc3R1cmVS
ZWNvZ25pemVyOwotICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIgbV90YXBHZXN0dXJlUmVjb2du
aXplcjsKIAogcHJpdmF0ZToKLSAgICBib29sIGhhbmRsZUtleVByZXNzRXZlbnQoUUtleUV2ZW50
Kik7Ci0gICAgYm9vbCBoYW5kbGVLZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7Ci0gICAgYm9v
bCBoYW5kbGVGb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZUZvY3Vz
T3V0RXZlbnQoUUZvY3VzRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZU1vdXNlTW92ZUV2ZW50KFFN
b3VzZUV2ZW50Kik7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQq
KTsKLSAgICBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50Kik7Ci0gICAg
Ym9vbCBoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKTsKLSAgICBib29s
IGhhbmRsZVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZUhvdmVyTGVh
dmVFdmVudChRSG92ZXJFdmVudCopOwotICAgIGJvb2wgaGFuZGxlSG92ZXJNb3ZlRXZlbnQoUUhv
dmVyRXZlbnQqKTsKLSAgICBib29sIGhhbmRsZURyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVu
dCopOwotICAgIGJvb2wgaGFuZGxlRHJhZ0xlYXZlRXZlbnQoUURyYWdMZWF2ZUV2ZW50Kik7Ci0g
ICAgYm9vbCBoYW5kbGVEcmFnTW92ZUV2ZW50KFFEcmFnTW92ZUV2ZW50Kik7Ci0gICAgYm9vbCBo
YW5kbGVEcm9wRXZlbnQoUURyb3BFdmVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIHRpbWVyRXZl
bnQoUVRpbWVyRXZlbnQqKTsKLQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgdmlydHVh
bCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpOwogI2VuZGlmCiAKLSAgICB2b2lkIHRvdWNoRXZlbnQoUVRvdWNo
RXZlbnQqKTsKLQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHQ+IGRlZmF1bHRXS0Nv
bnRleHQoKTsKICAgICBzdGF0aWMgUmVmUHRyPFdlYkNvbnRleHQ+IHNfZGVmYXVsdENvbnRleHQ7
CiAgICAgc3RhdGljIFJlZlB0cjxRdERvd25sb2FkTWFuYWdlcj4gc19kb3dubG9hZE1hbmFnZXI7
CkBAIC0yNTEsMTAgKzIxNCw5IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFFVbmRvU3RhY2s+IG1f
dW5kb1N0YWNrOwogCiAgICAgYm9vbCBtX25hdmlnYXRvclF0T2JqZWN0RW5hYmxlZDsKLSAgICBR
UG9pbnQgbV90cmlwbGVDbGljazsKLSAgICBRQmFzaWNUaW1lciBtX3RyaXBsZUNsaWNrVGltZXI7
CiAKICAgICBRU2hhcmVkUG9pbnRlcjxRTWVudT4gYWN0aXZlTWVudTsKKyAgICBRdFdlYlBhZ2VF
dmVudEhhbmRsZXIqIG1fcXRFdmVudEhhbmRsZXI7CiB9OwogCiAjZW5kaWYgLyogUXRXZWJQYWdl
UHJveHlfaCAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>