<?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>134209</bug_id>
          
          <creation_ts>2014-06-23 12:41:47 -0700</creation_ts>
          <short_desc>[Win] Clean up and refactor WinLauncher</short_desc>
          <delta_ts>2014-06-24 09:32:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1017649</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-23 12:41:47 -0700</bug_when>
    <thetext>WinLauncher is a bit of a mess, with tons of global variables and potentially buggy memory handling. Clean this up to take advantage of our various smart pointers, and refactor into a class that can be subclassed for use in other tools.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017774</commentid>
    <comment_count>1</comment_count>
      <attachid>233657</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-23 17:15:03 -0700</bug_when>
    <thetext>Created attachment 233657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017776</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-23 17:16:15 -0700</bug_when>
    <thetext>Attachment 233657 did not pass style-queue:


ERROR: Tools/WinLauncher/WinLauncherWebHost.h:34:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/Common.cpp:425:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:28:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 7 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017777</commentid>
    <comment_count>3</comment_count>
      <attachid>233659</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-23 17:21:35 -0700</bug_when>
    <thetext>Created attachment 233659
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017778</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-23 17:23:44 -0700</bug_when>
    <thetext>Attachment 233659 did not pass style-queue:


ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/Common.cpp:425:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Tools/WinLauncher/WinMain.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:28:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 6 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017780</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-23 17:26:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Attachment 233659 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; ERROR: Tools/WinLauncher/WinLauncherWebHost.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

These are correct. check-webkit-style should handle &quot;stdafx.h&quot; properly.

&gt; ERROR: Tools/WinLauncher/Common.cpp:425:  Multi line control clauses should use braces.  [whitespace/braces] [4]

It does. This code seems to confuse the style checker. It&apos;s been this way for years (I just copied to a new file).

&gt; ERROR: Tools/WinLauncher/WinMain.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
This is correct. check-webkit-style should handle &quot;stdafx.h&quot; properly.

&gt; ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:28:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; ERROR: Tools/WinLauncher/DOMDefaultImpl.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]

These are correct. check-webkit-style should handle &quot;stdafx.h&quot; properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017783</commentid>
    <comment_count>6</comment_count>
      <attachid>233659</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-06-23 17:30:38 -0700</bug_when>
    <thetext>Comment on attachment 233659
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017790</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-23 17:52:24 -0700</bug_when>
    <thetext>Committed r170339: &lt;http://trac.webkit.org/changeset/170339&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017846</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-23 22:28:13 -0700</bug_when>
    <thetext>For completeness, Brent Fulgham attempted to fix the build in &lt;http://trac.webkit.org/changeset/170340&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017847</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-23 22:34:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Committed r170339: &lt;http://trac.webkit.org/changeset/170339&gt;

This broke the Apple Windows Debug and Release builds.

Apple Windows Debug (r170340):
&lt;http://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/80161/steps/compile-webkit/logs/stdio&gt;

Apple Windows Release (r170340):
&lt;http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/62067/steps/compile-webkit/logs/stdio&gt;

Apple Window Debug (r170339):
&lt;http://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/80160/steps/compile-webkit/logs/stdio&gt;

Apple Windows Release (r170339):
&lt;http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/62066/steps/compile-webkit/logs/stdio&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017850</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-23 22:44:51 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Committed r170339: &lt;http://trac.webkit.org/changeset/170339&gt;
&gt; 
&gt; This broke the Apple Windows Debug and Release builds.
&gt; 

I&apos;m going to rollout both &lt;http://trac.webkit.org/changeset/170340&gt; and &lt;http://trac.webkit.org/changeset/170339&gt;.

Looking at the standard output from the bots, the bots are complaining that we&apos;re missing file WinLauncher.h, which I assume will have the class definition for WinLauncher. While I could attempt to write out a file WinLauncher.h with a class definition based on WinLauncher.cpp, I suspect Brent Fulgham has such a file and that it would be straightforward to land it when landing the changes again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017853</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2014-06-23 22:47:37 -0700</bug_when>
    <thetext>Rolled out &lt;http://trac.webkit.org/changeset/170340&gt; and &lt;http://trac.webkit.org/changeset/170339&gt; in &lt;http://trac.webkit.org/changeset/170346&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017971</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-24 09:20:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; Committed r170339: &lt;http://trac.webkit.org/changeset/170339&gt;
&gt; &gt; 
&gt; &gt; This broke the Apple Windows Debug and Release builds.
&gt; &gt; 
&gt; I&apos;m going to rollout both &lt;http://trac.webkit.org/changeset/170340&gt; and &lt;http://trac.webkit.org/changeset/170339&gt;.
&gt; 
&gt; Looking at the standard output from the bots, the bots are complaining that we&apos;re missing file WinLauncher.h, which I assume will have the class definition for WinLauncher.

This was caused by some svn mistakes on my part. WinLauncher.h was moved to WinLauncherWebHost.h, and then a new WinLauncher.h was added. This got munged up during my svn manipulations, which caused the archive version of the file to be wrong.

This should correct that.

Landed in &lt;http://trac.webkit.org/changeset/170365&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233657</attachid>
            <date>2014-06-23 17:15:03 -0700</date>
            <delta_ts>2014-06-23 17:21:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134209-20140623171500.patch</filename>
            <type>text/plain</type>
            <size>107037</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MDMzNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0OCBAQAorMjAxNC0wNi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2luXSBDbGVhbiB1cCBhbmQgcmVmYWN0b3IgV2luTGF1bmNoZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDIwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgV2luTGF1
bmNoZXIgYSBjbGFzcywgYW5kIG1vdmUgYWxsIG5vbi1jbGFzcyBkcml2ZXIgZnVuY3Rpb25zCisg
ICAgICAgIGludG8gIkNvbW1vbi5jcHAiIGFuZCAiV2luTWFpbi5jcHAiLiBUaGVzZSBmaWxlcyBh
cmUgZGlzdGluY3QKKyAgICAgICAgdG8gYWxsb3cgc29tZSBpbnRlcm5hbCB0b29scyB0byByZXVz
ZSB0aGUgY29kZSBpbiAnQ29tbW9uJy4KKworICAgICAgICAqIFdpbkxhdW5jaGVyL0NvbW1vbi5j
cHA6IEFkZGVkLgorICAgICAgICAoc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KToKKyAgICAgICAg
KGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKToKKyAgICAgICAgKERsbE1haW4pOgorICAgICAgICAo
Z2V0QXBwRGF0YUZvbGRlcik6CisgICAgICAgIChzZXRDYWNoZUZvbGRlcik6CisgICAgICAgIChj
cmVhdGVDcmFzaFJlcG9ydCk6CisgICAgICAgIChBYm9ydFByb2MpOgorICAgICAgICAoZ2V0UHJp
bnRlckRDKToKKyAgICAgICAgKGluaXREb2NTdHJ1Y3QpOgorICAgICAgICAoUHJpbnRWaWV3KToK
KyAgICAgICAgKFRvZ2dsZU1lbnVJdGVtKToKKyAgICAgICAgKFduZFByb2MpOgorICAgICAgICAo
RWRpdFByb2MpOgorICAgICAgICAoQmFja0J1dHRvblByb2MpOgorICAgICAgICAoRm9yd2FyZEJ1
dHRvblByb2MpOgorICAgICAgICAoQWJvdXQpOgorICAgICAgICAobG9hZFVSTCk6CisgICAgICAg
IChkbGxMYXVuY2hlckVudHJ5UG9pbnQpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL0RPTURlZmF1
bHRJbXBsLmNwcDogQ29waWVkIGZyb20gV2luTGF1bmNoZXIvRE9NRGVmYXVsdEltcGwuaC4KKyAg
ICAgICAgKERPTUV2ZW50TGlzdGVuZXI6OlJlbGVhc2UpOgorICAgICAgICAoV2ViU2NyaXB0T2Jq
ZWN0OjpXZWJTY3JpcHRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0
Ojp+V2ViU2NyaXB0T2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6
dGhyb3dFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpjYWxs
V2ViU2NyaXB0TWV0aG9kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6ZXZh
bHVhdGVXZWJTY3JpcHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpyZW1v
dmVXZWJTY3JpcHRLZXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpzdHJp
bmdSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJTY3JpcHRPYmplY3Q6Ondl
YlNjcmlwdFZhbHVlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJTY3JpcHRPYmplY3Q6
OnNldFdlYlNjcmlwdFZhbHVlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJTY3JpcHRP
YmplY3Q6OnNldEV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVy
Ojp0aHJvd0V4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpj
YWxsV2ViU2NyaXB0TWV0aG9kKTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6
OmV2YWx1YXRlV2ViU2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6
OnJlbW92ZVdlYlNjcmlwdEtleSk6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVy
OjpzdHJpbmdSZXByZXNlbnRhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3Rl
bmVyOjp3ZWJTY3JpcHRWYWx1ZUF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRM
aXN0ZW5lcjo6c2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKERP
TUV2ZW50TGlzdGVuZXI6OnNldEV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IERlbGV0ZWQuCisgICAgICAgICogV2luTGF1bmNoZXIv
RE9NRGVmYXVsdEltcGwuaDoKKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6UXVlcnlJbnRlcmZh
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpBZGRSZWYpOiBEZWxldGVk
LgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpSZWxlYXNlKTogRGVsZXRlZC4KKyAgICAgICAg
KERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UpOiBEZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRM
aXN0ZW5lcjo6UXVlcnlJbnRlcmZhY2UpOiBEZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0
ZW5lcjo6QWRkUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6OlJlbGVh
c2UpOiBEZWxldGVkLgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcDoKKyAg
ICAgICAgKFdpbkxhdW5jaGVyOjpXaW5MYXVuY2hlcik6CisgICAgICAgIChXaW5MYXVuY2hlcjo6
aW5pdCk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6cHJlcGFyZVZpZXdzKToKKyAgICAgICAgKFdp
bkxhdW5jaGVyOjpzZXRGcmFtZUxvYWREZWxlZ2F0ZSk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6
c2V0VUlEZWxlZ2F0ZSk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6c2V0QWNjZXNzaWJpbGl0eURl
bGVnYXRlKToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjptYWluRnJhbWUpOgorICAgICAgICAoV2lu
TGF1bmNoZXI6OnNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKToKKyAgICAgICAgKFdpbkxh
dW5jaGVyOjpzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcyk6CisgICAgICAgICh1cGRhdGVNZW51SXRl
bUZvckhpc3RvcnlJdGVtKToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpzaG93TGFzdFZpc2l0ZWRT
aXRlcyk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6bGF1bmNoSW5zcGVjdG9yKToKKyAgICAgICAg
KFdpbkxhdW5jaGVyOjpuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKToKKyAgICAgICAgKFdpbkxh
dW5jaGVyOjpuYXZpZ2F0ZVRvSGlzdG9yeSk6CisgICAgICAgIChXaW5MYXVuY2hlcjo6Z29CYWNr
KToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpnb0ZvcndhcmQpOgorICAgICAgICAoV2luTGF1bmNo
ZXI6OmxvYWRVUkwpOgorICAgICAgICAoc2hvdWxkVXNlRnVsbERlc2t0b3ApOiBEZWxldGVkLgor
ICAgICAgICAoU2ltcGxlRXZlbnRMaXN0ZW5lcjo6U2ltcGxlRXZlbnRMaXN0ZW5lcik6IERlbGV0
ZWQuCisgICAgICAgIChTaW1wbGVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6IERlbGV0ZWQu
CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OnVwZGF0ZUFkZHJlc3NCYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0
aEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6UXVlcnlJbnRl
cmZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpBZGRSZWYpOiBE
ZWxldGVkLgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpSZWxlYXNlKTogRGVsZXRlZC4K
KyAgICAgICAgKHNob3dMYXN0VmlzaXRlZFNpdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdpbkxh
dW5jaGVyV2ViSG9zdDo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KHJlc2l6ZVN1YlZpZXdzKTogRGVsZXRlZC4KKyAgICAgICAgKHN1YmNsYXNzRm9yTGF5ZXJlZFdp
bmRvdyk6IERlbGV0ZWQuCisgICAgICAgIChjb21wdXRlRnVsbERlc2t0b3BGcmFtZSk6IERlbGV0
ZWQuCisgICAgICAgIChEbGxNYWluKTogRGVsZXRlZC4KKyAgICAgICAgKGdldEFwcERhdGFGb2xk
ZXIpOiBEZWxldGVkLgorICAgICAgICAoc2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMpOiBEZWxldGVk
LgorICAgICAgICAoc2V0Q2FjaGVGb2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoY3JlYXRlQ3Jh
c2hSZXBvcnQpOiBEZWxldGVkLgorICAgICAgICAod1dpbk1haW4pOiBEZWxldGVkLgorICAgICAg
ICAoTXlSZWdpc3RlckNsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEFib3J0UHJvYyk6IERlbGV0
ZWQuCisgICAgICAgIChnZXRQcmludGVyREMpOiBEZWxldGVkLgorICAgICAgICAoaW5pdERvY1N0
cnVjdCk6IERlbGV0ZWQuCisgICAgICAgIChQcmludFZpZXcpOiBEZWxldGVkLgorICAgICAgICAo
VG9nZ2xlTWVudUl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoTGF1bmNoSW5zcGVjdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKE5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQpOiBEZWxldGVkLgorICAg
ICAgICAoTmF2aWdhdGVUb0hpc3RvcnkpOiBEZWxldGVkLgorICAgICAgICAoV25kUHJvYyk6IERl
bGV0ZWQuCisgICAgICAgIChFZGl0UHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChCYWNrQnV0dG9u
UHJvYyk6IERlbGV0ZWQuCisgICAgICAgIChGb3J3YXJkQnV0dG9uUHJvYyk6IERlbGV0ZWQuCisg
ICAgICAgIChBYm91dCk6IERlbGV0ZWQuCisgICAgICAgIChsb2FkVVJMKTogRGVsZXRlZC4KKyAg
ICAgICAgKGRsbExhdW5jaGVyRW50cnlQb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogV2luTGF1
bmNoZXIvV2luTGF1bmNoZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5M
YXVuY2hlci52Y3hwcm9qL1dpbkxhdW5jaGVyTGliLnZjeHByb2o6CisgICAgICAgICogV2luTGF1
bmNoZXIvV2luTGF1bmNoZXIudmN4cHJvai9XaW5MYXVuY2hlckxpYi52Y3hwcm9qLmZpbHRlcnM6
CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1bmNoZXJSZXBsYWNlLmg6CisgICAgICAgIChw
cm9jZXNzQ3Jhc2hSZXBvcnQpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2Vi
SG9zdC5jcHA6IEFkZGVkLgorICAgICAgICAoU2ltcGxlRXZlbnRMaXN0ZW5lcjo6U2ltcGxlRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChTaW1wbGVFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6
CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OnVwZGF0ZUFkZHJlc3NCYXIpOgorICAgICAg
ICAoV2luTGF1bmNoZXJXZWJIb3N0OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yKToK
KyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6UXVlcnlJbnRlcmZhY2UpOgorICAgICAgICAo
V2luTGF1bmNoZXJXZWJIb3N0OjpBZGRSZWYpOgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0
OjpSZWxlYXNlKToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkRmluaXNoTG9hZEZv
ckZyYW1lKToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaDogQ29w
aWVkIGZyb20gV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaC4KKyAgICAgICAgKFdpbkxhdW5jaGVy
V2ViSG9zdDo6V2luTGF1bmNoZXJXZWJIb3N0KToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9z
dDo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXaW5MYXVuY2hl
cldlYkhvc3Q6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1l
KToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkUmVjZWl2ZVRpdGxlKToKKyAgICAg
ICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkQ2hhbmdlSWNvbnMpOgorICAgICAgICAoV2luTGF1
bmNoZXJXZWJIb3N0OjpkaWRSZWNlaXZlSWNvbik6CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhv
c3Q6OmRpZEZhaWxMb2FkV2l0aEVycm9yKToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6
ZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUpOgorICAgICAgICAoV2luTGF1bmNo
ZXJXZWJIb3N0Ojp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkwpOgorICAgICAgICAoV2lu
TGF1bmNoZXJXZWJIb3N0OjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKToKKyAgICAg
ICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6d2lsbENsb3NlRnJhbWUpOgorICAgICAgICAoV2luTGF1
bmNoZXJXZWJIb3N0Ojp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUpOgorICAgICAgICAoV2lu
TGF1bmNoZXJXZWJIb3N0OjpkaWRDbGVhcldpbmRvd09iamVjdCk6CisgICAgICAgICogV2luTGF1
bmNoZXIvV2luTWFpbi5jcHA6IEFkZGVkLgorICAgICAgICAod1dpbk1haW4pOgorICAgICAgICAo
TXlSZWdpc3RlckNsYXNzKToKKwogMjAxNC0wNi0yMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJh
c2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBFbmFibGUgdGhlIFdlYiBJbnNwZWN0b3IgaW4gTWlu
aUJyb3dzZXIKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2luTGF1bmNoZXIvQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1dp
bkxhdW5jaGVyL0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxn
aGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkRPTURlZmF1bHRJbXBsLmgiCisjaW5jbHVkZSAi
UHJpbnRXZWJVSURlbGVnYXRlLmgiCisjaW5jbHVkZSAiV2luTGF1bmNoZXIuaCIKKyNpbmNsdWRl
ICJXaW5MYXVuY2hlclJlcGxhY2UuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Q09NQVBJLmg+
CisjaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jvcy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUnVuTG9vcC5oPgor
I2VuZGlmCisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGNvbWlwLmg+CisjaW5jbHVk
ZSA8Y29tbWN0cmwuaD4KKyNpbmNsdWRlIDxjb21tZGxnLmg+CisjaW5jbHVkZSA8Y29tdXRpbC5o
PgorI2luY2x1ZGUgPGRiZ2hlbHAuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8b2Jq
YmFzZS5oPgorI2luY2x1ZGUgPHNoZWxsYXBpLmg+CisjaW5jbHVkZSA8c2hsb2JqLmg+CisjaW5j
bHVkZSA8c2hsd2FwaS5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8d2luaW5ldC5oPgorCisjZGVmaW5lIE1BWF9MT0FEU1RSSU5HIDEwMAorI2RlZmlu
ZSBVUkxCQVJfSEVJR0hUICAyNAorI2RlZmluZSBDT05UUk9MQlVUVE9OX1dJRFRIIDI0CisKK3N0
YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNpemUgPSAxMDsKKwordHlwZWRlZiBfY29tX3B0cl90
PF9jb21fSUlJRDxJV2ViRnJhbWUsICZfX3V1aWRvZihJV2ViRnJhbWUpPj4gSVdlYkZyYW1lUHRy
OwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3QsICZf
X3V1aWRvZihJV2ViTXV0YWJsZVVSTFJlcXVlc3QpPj4gSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRy
OwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViQ2FjaGUsICZfX3V1aWRvZihJV2Vi
Q2FjaGUpPj4gSVdlYkNhY2hlUHRyOworCisvLyBHbG9iYWwgVmFyaWFibGVzOgorSElOU1RBTkNF
IGhJbnN0OworSFdORCBoTWFpblduZDsKK0hXTkQgaFVSTEJhclduZDsKK0hXTkQgaEJhY2tCdXR0
b25XbmQ7CitIV05EIGhGb3J3YXJkQnV0dG9uV25kOworV05EUFJPQyBEZWZFZGl0UHJvYyA9IG51
bGxwdHI7CitXTkRQUk9DIERlZkJ1dHRvblByb2MgPSBudWxscHRyOworV05EUFJPQyBEZWZXZWJL
aXRQcm9jID0gbnVsbHB0cjsKK0hXTkQgZ1ZpZXdXaW5kb3cgPSAwOworV2luTGF1bmNoZXIqIGdX
aW5MYXVuY2hlciA9IG51bGxwdHI7CitUQ0hBUiBzelRpdGxlW01BWF9MT0FEU1RSSU5HXTsgLy8g
VGhlIHRpdGxlIGJhciB0ZXh0CitUQ0hBUiBzeldpbmRvd0NsYXNzW01BWF9MT0FEU1RSSU5HXTsg
Ly8gdGhlIG1haW4gd2luZG93IGNsYXNzIG5hbWUKKworLy8gU3VwcG9ydCBtb3ZpbmcgdGhlIHRy
YW5zcGFyZW50IHdpbmRvdworUE9JTlQgc193aW5kb3dQb3NpdGlvbiA9IHsgMTAwLCAxMDAgfTsK
K1NJWkUgc193aW5kb3dTaXplID0geyA4MDAsIDQwMCB9OworCisvLyBGb3J3YXJkIGRlY2xhcmF0
aW9ucyBvZiBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhpcyBjb2RlIG1vZHVsZToKK0FUT00gTXlS
ZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpOworTFJFU1VMVCBDQUxMQkFDSyBXbmRQ
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0lOVF9QVFIgQ0FMTEJBQ0sgQWJvdXQo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VMVCBDQUxMQkFDSyBFZGl0UHJvYyhI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CitMUkVTVUxUIENBTExCQUNLIEJhY2tCdXR0b25Q
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgRm9yd2Fy
ZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworTFJFU1VMVCBDQUxMQkFD
SyBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKKworc3RhdGlj
IHZvaWQgbG9hZFVSTChCU1RSIHVybEJTdHIpOworCitzdGF0aWMgdm9pZCByZXNpemVTdWJWaWV3
cygpCit7CisgICAgaWYgKGdXaW5MYXVuY2hlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkgfHwgIWdW
aWV3V2luZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBSRUNUIHJjQ2xpZW50OworICAgIEdl
dENsaWVudFJlY3QoaE1haW5XbmQsICZyY0NsaWVudCk7CisgICAgTW92ZVdpbmRvdyhoQmFja0J1
dHRvblduZCwgMCwgMCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7
CisgICAgTW92ZVdpbmRvdyhoRm9yd2FyZEJ1dHRvblduZCwgQ09OVFJPTEJVVFRPTl9XSURUSCwg
MCwgQ09OVFJPTEJVVFRPTl9XSURUSCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7CisgICAgTW92ZVdp
bmRvdyhoVVJMQmFyV25kLCBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgcmNDbGllbnQucmln
aHQsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOworICAgIE1vdmVXaW5kb3coZ1ZpZXdXaW5kb3csIDAs
IFVSTEJBUl9IRUlHSFQsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20gLSBVUkxCQVJf
SEVJR0hULCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93
KCkKK3sKKyAgICBoTWFpblduZCA9IGdWaWV3V2luZG93OworI2lmIGRlZmluZWQgX01fQU1ENjQg
fHwgZGVmaW5lZCBfV0lONjQKKyAgICBEZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxX
TkRQUk9DPig6OkdldFdpbmRvd0xvbmdQdHIoaE1haW5XbmQsIEdXTFBfV05EUFJPQykpOworICAg
IDo6U2V0V2luZG93TG9uZ1B0cihoTWFpblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9j
YXN0PExPTkdfUFRSPihXbmRQcm9jKSk7CisjZWxzZQorICAgIERlZldlYktpdFByb2MgPSByZWlu
dGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZyhoTWFpblduZCwgR1dMX1dORFBS
T0MpKTsKKyAgICA6OlNldFdpbmRvd0xvbmcoaE1haW5XbmQsIEdXTF9XTkRQUk9DLCByZWludGVy
cHJldF9jYXN0PExPTkdfUFRSPihXbmRQcm9jKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQg
Y29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKQoreworICAgIFJFQ1QgZGVza3RvcDsKKyAgICBpZiAo
ITo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVFdPUktBUkVBLCAwLCBzdGF0aWNfY2FzdDx2
b2lkKj4oJmRlc2t0b3ApLCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc193aW5kb3dQb3Np
dGlvbi54ID0gMDsKKyAgICBzX3dpbmRvd1Bvc2l0aW9uLnkgPSAwOworICAgIHNfd2luZG93U2l6
ZS5jeCA9IGRlc2t0b3AucmlnaHQgLSBkZXNrdG9wLmxlZnQ7CisgICAgc193aW5kb3dTaXplLmN5
ID0gZGVza3RvcC5ib3R0b20gLSBkZXNrdG9wLnRvcDsKK30KKworQk9PTCBXSU5BUEkgRGxsTWFp
bihISU5TVEFOQ0UgZGxsSW5zdGFuY2UsIERXT1JEIHJlYXNvbiwgTFBWT0lEKQoreworICAgIGlm
IChyZWFzb24gPT0gRExMX1BST0NFU1NfQVRUQUNIKQorICAgICAgICBoSW5zdCA9IGRsbEluc3Rh
bmNlOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBib29sIGdldEFwcERhdGFGb2xk
ZXIoX2JzdHJfdCYgZGlyZWN0b3J5KQoreworICAgIHdjaGFyX3QgYXBwRGF0YURpcmVjdG9yeVtN
QVhfUEFUSF07CisgICAgaWYgKEZBSUxFRChTSEdldEZvbGRlclBhdGhXKDAsIENTSURMX0xPQ0FM
X0FQUERBVEEgfCBDU0lETF9GTEFHX0NSRUFURSwgMCwgMCwgYXBwRGF0YURpcmVjdG9yeSkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB3Y2hhcl90IGV4ZWN1dGFibGVQYXRoW01BWF9Q
QVRIXTsKKyAgICA6OkdldE1vZHVsZUZpbGVOYW1lVygwLCBleGVjdXRhYmxlUGF0aCwgTUFYX1BB
VEgpOworICAgIDo6UGF0aFJlbW92ZUV4dGVuc2lvblcoZXhlY3V0YWJsZVBhdGgpOworCisgICAg
ZGlyZWN0b3J5ID0gX2JzdHJfdChhcHBEYXRhRGlyZWN0b3J5KSArIEwiXFwiICsgOjpQYXRoRmlu
ZEZpbGVOYW1lVyhleGVjdXRhYmxlUGF0aCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGJvb2wgc2V0Q2FjaGVGb2xkZXIoKQoreworICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZTsK
KworICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJDYWNoZSwg
MCwgX191dWlkb2Yod2ViQ2FjaGUpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYkNhY2hl
LkdldEludGVyZmFjZVB0cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIF9ic3RyX3QgYXBwRGF0YUZvbGRlcjsKKyAgICBpZiAoIWdldEFwcERh
dGFGb2xkZXIoYXBwRGF0YUZvbGRlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFw
cERhdGFGb2xkZXIgKz0gTCJcXGNhY2hlIjsKKyAgICB3ZWJDYWNoZS0+c2V0Q2FjaGVGb2xkZXIo
YXBwRGF0YUZvbGRlcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBjcmVhdGVDcmFz
aFJlcG9ydChFWENFUFRJT05fUE9JTlRFUlMqIGV4Y2VwdGlvblBvaW50ZXJzKQoreworICAgIF9i
c3RyX3QgZGlyZWN0b3J5OworCisgICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGRpcmVjdG9yeSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICg6OlNIQ3JlYXRlRGlyZWN0b3J5RXgoMCwgZGly
ZWN0b3J5LCAwKSAhPSBFUlJPUl9TVUNDRVNTCisgICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkg
IT0gRVJST1JfRklMRV9FWElTVFMKKyAgICAgICAgJiYgOjpHZXRMYXN0RXJyb3IoKSAhPSBFUlJP
Ul9BTFJFQURZX0VYSVNUUykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp3c3RyaW5nIGZp
bGVOYW1lID0gZGlyZWN0b3J5ICsgTCJcXENyYXNoUmVwb3J0LmRtcCI7CisgICAgSEFORExFIG1p
bmlEdW1wRmlsZSA9IDo6Q3JlYXRlRmlsZShmaWxlTmFtZS5jX3N0cigpLCBHRU5FUklDX1dSSVRF
LCAwLCAwLCBDUkVBVEVfQUxXQVlTLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOworCisgICAg
aWYgKG1pbmlEdW1wRmlsZSAmJiBtaW5pRHVtcEZpbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUp
IHsKKworICAgICAgICBNSU5JRFVNUF9FWENFUFRJT05fSU5GT1JNQVRJT04gbWRlaTsKKyAgICAg
ICAgbWRlaS5UaHJlYWRJZCA9IDo6R2V0Q3VycmVudFRocmVhZElkKCk7CisgICAgICAgIG1kZWku
RXhjZXB0aW9uUG9pbnRlcnMgID0gZXhjZXB0aW9uUG9pbnRlcnM7CisgICAgICAgIG1kZWkuQ2xp
ZW50UG9pbnRlcnMgPSAwOworCisjaWZkZWYgX0RFQlVHCisgICAgICAgIE1JTklEVU1QX1RZUEUg
ZHVtcFR5cGUgPSBNaW5pRHVtcFdpdGhGdWxsTWVtb3J5OworI2Vsc2UKKyAgICAgICAgTUlOSURV
TVBfVFlQRSBkdW1wVHlwZSA9IE1pbmlEdW1wTm9ybWFsOworI2VuZGlmCisKKyAgICAgICAgOjpN
aW5pRHVtcFdyaXRlRHVtcCg6OkdldEN1cnJlbnRQcm9jZXNzKCksIDo6R2V0Q3VycmVudFByb2Nl
c3NJZCgpLCBtaW5pRHVtcEZpbGUsIGR1bXBUeXBlLCAmbWRlaSwgMCwgMCk7CisgICAgICAgIDo6
Q2xvc2VIYW5kbGUobWluaUR1bXBGaWxlKTsKKyAgICAgICAgcHJvY2Vzc0NyYXNoUmVwb3J0KGZp
bGVOYW1lLmNfc3RyKCkpOworICAgIH0KK30KKworc3RhdGljIEJPT0wgQ0FMTEJBQ0sgQWJvcnRQ
cm9jKEhEQyBoREMsIGludCBFcnJvcikKK3sKKyAgICBNU0cgbXNnOworICAgIHdoaWxlICg6OlBl
ZWtNZXNzYWdlKCZtc2csIDAsIDAsIDAsIFBNX1JFTU9WRSkpIHsKKyAgICAgICAgOjpUcmFuc2xh
dGVNZXNzYWdlKCZtc2cpOworICAgICAgICA6OkRpc3BhdGNoTWVzc2FnZSgmbXNnKTsKKyAgICB9
CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIEhEQyBnZXRQcmludGVyREMoKQorewor
ICAgIFBSSU5URExHIHBkbGc7CisgICAgbWVtc2V0KCZwZGxnLCAwLCBzaXplb2YoUFJJTlRETEcp
KTsKKyAgICBwZGxnLmxTdHJ1Y3RTaXplID0gc2l6ZW9mKFBSSU5URExHKTsKKyAgICBwZGxnLkZs
YWdzID0gUERfUFJJTlRTRVRVUCB8IFBEX1JFVFVSTkRDOworCisgICAgOjpQcmludERsZygmcGRs
Zyk7CisKKyAgICByZXR1cm4gcGRsZy5oREM7Cit9CisKK3N0YXRpYyB2b2lkIGluaXREb2NTdHJ1
Y3QoRE9DSU5GTyogZGksIFRDSEFSKiBkb2NuYW1lKQoreworICAgIG1lbXNldChkaSwgMCwgc2l6
ZW9mKERPQ0lORk8pKTsKKyAgICBkaS0+Y2JTaXplID0gc2l6ZW9mKERPQ0lORk8pOworICAgIGRp
LT5scHN6RG9jTmFtZSA9IGRvY25hbWU7Cit9CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYkZyYW1lUHJpdmF0ZSwgJl9fdXVpZG9mKElXZWJGcmFtZVByaXZhdGUpPj4gSVdlYkZy
YW1lUHJpdmF0ZVB0cjsKKwordm9pZCBQcmludFZpZXcoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgSERDIHByaW50REMgPSBnZXRQ
cmludGVyREMoKTsKKyAgICBpZiAoIXByaW50REMpIHsKKyAgICAgICAgOjpNZXNzYWdlQm94Vygw
LCBMIkVycm9yIGNyZWF0aW5nIHByaW50aW5nIERDIiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8
IE1CX09LKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICg6OlNldEFib3J0UHJv
YyhwcmludERDLCBBYm9ydFByb2MpID09IFNQX0VSUk9SKSB7CisgICAgICAgIDo6TWVzc2FnZUJv
eFcoMCwgTCJFcnJvciBzZXR0aW5nIHVwIEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9E
QUwgfCBNQl9PSyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJV2ViRnJhbWVQdHIg
ZnJhbWUgPSBnV2luTGF1bmNoZXItPm1haW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIElXZWJGcmFtZVByaXZhdGVQdHIgZnJhbWVQcml2YXRlOworICAg
IGlmIChGQUlMRUQoZnJhbWUtPlF1ZXJ5SW50ZXJmYWNlKCZmcmFtZVByaXZhdGUuR2V0SW50ZXJm
YWNlUHRyKCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVQcml2YXRlLT5zZXRJblBy
aW50aW5nTW9kZShUUlVFLCBwcmludERDKTsKKworICAgIFVJTlQgcGFnZUNvdW50ID0gMDsKKyAg
ICBmcmFtZVByaXZhdGUtPmdldFByaW50ZWRQYWdlQ291bnQocHJpbnREQywgJnBhZ2VDb3VudCk7
CisKKyAgICBET0NJTkZPIGRpOworICAgIGluaXREb2NTdHJ1Y3QoJmRpLCBMIldlYktpdCBEb2Mi
KTsKKyAgICA6OlN0YXJ0RG9jKHByaW50REMsICZkaSk7CisKKyAgICAvLyBGSVhNRTogTmVlZCBD
b3JlR3JhcGhpY3MgaW1wbGVtZW50YXRpb24KKyAgICB2b2lkKiBncmFwaGljc0NvbnRleHQgPSAw
OworICAgIGZvciAoc2l6ZV90IHBhZ2UgPSAxOyBwYWdlIDw9IHBhZ2VDb3VudDsgKytwYWdlKSB7
CisgICAgICAgIDo6U3RhcnRQYWdlKHByaW50REMpOworICAgICAgICBmcmFtZVByaXZhdGUtPnNw
b29sUGFnZXMocHJpbnREQywgcGFnZSwgcGFnZSwgZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAg
OjpFbmRQYWdlKHByaW50REMpOworICAgIH0KKworICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5Qcmlu
dGluZ01vZGUoRkFMU0UsIHByaW50REMpOworCisgICAgOjpFbmREb2MocHJpbnREQyk7CisgICAg
OjpEZWxldGVEQyhwcmludERDKTsKK30KKworc3RhdGljIHZvaWQgVG9nZ2xlTWVudUl0ZW0oSFdO
RCBoV25kLCBVSU5UIG1lbnVJRCkKK3sKKyAgICBITUVOVSBtZW51ID0gOjpHZXRNZW51KGhXbmQp
OworCisgICAgTUVOVUlURU1JTkZPIGluZm87CisgICAgOjptZW1zZXQoJmluZm8sIDB4MDAsIHNp
emVvZihpbmZvKSk7CisgICAgaW5mby5jYlNpemUgPSBzaXplb2YoaW5mbyk7CisgICAgaW5mby5m
TWFzayA9IE1JSU1fU1RBVEU7CisKKyAgICBpZiAoITo6R2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1l
bnVJRCwgRkFMU0UsICZpbmZvKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQk9PTCBuZXdTdGF0
ZSA9ICEoaW5mby5mU3RhdGUgJiBNRlNfQ0hFQ0tFRCk7CisKKyAgICBpZiAoIWdXaW5MYXVuY2hl
ci0+c3RhbmRhcmRQcmVmZXJlbmNlcygpIHx8ICFnV2luTGF1bmNoZXItPnByaXZhdGVQcmVmZXJl
bmNlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAgIGNh
c2UgSURNX0FWRk9VTkRBVElPTjoKKyAgICAgICAgZ1dpbkxhdW5jaGVyLT5zdGFuZGFyZFByZWZl
cmVuY2VzKCktPnNldEFWRm91bmRhdGlvbkVuYWJsZWQobmV3U3RhdGUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIElETV9BQ0NfQ09NUE9TSVRJTkc6CisgICAgICAgIGdXaW5MYXVuY2hlci0+
cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKG5l
d1N0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fV0tfRlVMTFNDUkVFTjoKKyAg
ICAgICAgZ1dpbkxhdW5jaGVyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVu
YWJsZWQobmV3U3RhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9DT01QT1NJVElO
R19CT1JERVJTOgorICAgICAgICBnV2luTGF1bmNoZXItPnByaXZhdGVQcmVmZXJlbmNlcygpLT5z
ZXRTaG93RGVidWdCb3JkZXJzKG5ld1N0YXRlKTsKKyAgICAgICAgZ1dpbkxhdW5jaGVyLT5wcml2
YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKG5ld1N0YXRlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJRE1fRElTQUJMRV9JTUFHRVM6CisgICAgICAgIGdXaW5MYXVu
Y2hlci0+c3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHko
IW5ld1N0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fRElTQUJMRV9TVFlMRVM6
CisgICAgICAgIGdXaW5MYXVuY2hlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEF1dGhvckFu
ZFVzZXJTdHlsZXNFbmFibGVkKCFuZXdTdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SURNX0RJU0FCTEVfSkFWQVNDUklQVDoKKyAgICAgICAgZ1dpbkxhdW5jaGVyLT5zdGFuZGFyZFBy
ZWZlcmVuY2VzKCktPnNldEphdmFTY3JpcHRFbmFibGVkKCFuZXdTdGF0ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSURNX0RJU0FCTEVfTE9DQUxfRklMRV9SRVNUUklDVElPTlM6CisgICAg
ICAgIGdXaW5MYXVuY2hlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFsbG93VW5pdmVyc2Fs
QWNjZXNzRnJvbUZpbGVVUkxzKG5ld1N0YXRlKTsKKyAgICAgICAgZ1dpbkxhdW5jaGVyLT5wcml2
YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKG5ld1N0YXRl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaW5mby5mU3RhdGUgPSAobmV3U3RhdGUp
ID8gTUZTX0NIRUNLRUQgOiBNRlNfVU5DSEVDS0VEOworCisgICAgOjpTZXRNZW51SXRlbUluZm8o
bWVudSwgbWVudUlELCBGQUxTRSwgJmluZm8pOworfQorCitzdGF0aWMgY29uc3QgaW50IGRyYWdC
YXJIZWlnaHQgPSAzMDsKKworTFJFU1VMVCBDQUxMQkFDSyBXbmRQcm9jKEhXTkQgaFduZCwgVUlO
VCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIFdORFBST0Mg
cGFyZW50UHJvYyA9IChnV2luTGF1bmNoZXIpID8gKGdXaW5MYXVuY2hlci0+dXNlc0xheWVyZWRX
ZWJWaWV3KCkgPyBEZWZXZWJLaXRQcm9jIDogRGVmV2luZG93UHJvYykgOiBEZWZXaW5kb3dQcm9j
OworCisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgY2FzZSBXTV9OQ0hJVFRFU1Q6CisgICAg
ICAgIGlmIChnV2luTGF1bmNoZXIgJiYgZ1dpbkxhdW5jaGVyLT51c2VzTGF5ZXJlZFdlYlZpZXco
KSkgeworICAgICAgICAgICAgUkVDVCB3aW5kb3c7CisgICAgICAgICAgICA6OkdldFdpbmRvd1Jl
Y3QoaFduZCwgJndpbmRvdyk7CisgICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNw
YXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKKyAg
ICAgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUg
dG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKKyAgICAgICAgICAgIC8vIHVuZGVy
IHRoZSBtb3VzZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4g
YXJiaXRyYXJ5CisgICAgICAgICAgICAvLyAzMCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhl
IHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NB
UFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KKyAgICAgICAgICAgIC8vIHRyZWF0IHRo
aXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cu
CisgICAgICAgICAgICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOworCisgICAgICAgICAgICBpZiAo
KHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBkcmFnQmFySGVpZ2h0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSFRDQVBUSU9OOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7CisgICAgY2FzZSBXTV9DT01NQU5EOiB7CisgICAgICAgIGludCB3bUlkID0gTE9XT1JEKHdQ
YXJhbSk7CisgICAgICAgIGludCB3bUV2ZW50ID0gSElXT1JEKHdQYXJhbSk7CisgICAgICAgIGlm
ICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYmIHdtSWQgPD0gSURNX0hJU1RPUllfTElOSzkp
IHsKKyAgICAgICAgICAgIGlmIChnV2luTGF1bmNoZXIpCisgICAgICAgICAgICAgICAgZ1dpbkxh
dW5jaGVyLT5uYXZpZ2F0ZVRvSGlzdG9yeShoV25kLCB3bUlkKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIC8vIFBhcnNlIHRoZSBtZW51IHNlbGVjdGlvbnM6CisgICAg
ICAgIHN3aXRjaCAod21JZCkgeworICAgICAgICBjYXNlIElETV9BQk9VVDoKKyAgICAgICAgICAg
IERpYWxvZ0JveChoSW5zdCwgTUFLRUlOVFJFU09VUkNFKElERF9BQk9VVEJPWCksIGhXbmQsIEFi
b3V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9FWElUOgorICAgICAg
ICAgICAgRGVzdHJveVdpbmRvdyhoV25kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIElETV9QUklOVDoKKyAgICAgICAgICAgIFByaW50VmlldyhoV25kLCBtZXNzYWdlLCB3UGFy
YW0sIGxQYXJhbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fV0VCX0lO
U1BFQ1RPUjoKKyAgICAgICAgICAgIGlmIChnV2luTGF1bmNoZXIpCisgICAgICAgICAgICAgICAg
Z1dpbkxhdW5jaGVyLT5sYXVuY2hJbnNwZWN0b3IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElETV9ISVNUT1JZX0JBQ0tXQVJEOgorICAgICAgICBjYXNlIElETV9ISVNUT1JZ
X0ZPUldBUkQ6CisgICAgICAgICAgICBpZiAoZ1dpbkxhdW5jaGVyKQorICAgICAgICAgICAgICAg
IGdXaW5MYXVuY2hlci0+bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChoV25kLCB3bUlkKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElETV9BVkZPVU5EQVRJT046CisgICAgICAg
IGNhc2UgSURNX0FDQ19DT01QT1NJVElORzoKKyAgICAgICAgY2FzZSBJRE1fV0tfRlVMTFNDUkVF
TjoKKyAgICAgICAgY2FzZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKKyAgICAgICAgY2FzZSBJ
RE1fRElTQUJMRV9JTUFHRVM6CisgICAgICAgIGNhc2UgSURNX0RJU0FCTEVfU1RZTEVTOgorICAg
ICAgICBjYXNlIElETV9ESVNBQkxFX0pBVkFTQ1JJUFQ6CisgICAgICAgIGNhc2UgSURNX0RJU0FC
TEVfTE9DQUxfRklMRV9SRVNUUklDVElPTlM6CisgICAgICAgICAgICBUb2dnbGVNZW51SXRlbSho
V25kLCB3bUlkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fREVTVFJPWToKKyNpZiBVU0UoQ0YpCisgICAgICAgIENGUnVuTG9vcFN0b3AoQ0ZS
dW5Mb29wR2V0TWFpbigpKTsKKyNlbmRpZgorICAgICAgICBQb3N0UXVpdE1lc3NhZ2UoMCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgaWYgKCFnV2luTGF1bmNo
ZXIgfHwgIWdXaW5MYXVuY2hlci0+aGFzV2ViVmlldygpIHx8IGdXaW5MYXVuY2hlci0+dXNlc0xh
eWVyZWRXZWJWaWV3KCkpCisgICAgICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50
UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworCisgICAgICAgIHJlc2l6ZVN1
YlZpZXdzKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBD
YWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgRWRpdFByb2Mo
SFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7
CisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisgICAgY2FzZSBXTV9DSEFSOgorICAgICAgICBpZiAo
d1BhcmFtID09IDEzKSB7IC8vIEVudGVyIEtleQorICAgICAgICAgICAgd2NoYXJfdCBzdHJQdHJb
SU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOworICAgICAgICAgICAgKigoTFBXT1JEKXN0clB0cikg
PSBJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSDsgCisgICAgICAgICAgICBpbnQgc3RyTGVuID0gU2Vu
ZE1lc3NhZ2UoaERsZywgRU1fR0VUTElORSwgMCwgKExQQVJBTSlzdHJQdHIpOworCisgICAgICAg
ICAgICBzdHJQdHJbc3RyTGVuXSA9IDA7CisgICAgICAgICAgICBfYnN0cl90IGJzdHIoc3RyUHRy
KTsKKyAgICAgICAgICAgIGxvYWRVUkwoYnN0ci5HZXRCU1RSKCkpOworCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfSAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ2FsbFdp
bmRvd1Byb2MoRGVmRWRpdFByb2MsIGhEbGcsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAg
ICB9Cit9CisKK0xSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1dHRvblByb2MoSFdORCBoRGxnLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3dpdGNoICht
ZXNzYWdlKSB7CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGdXaW5MYXVuY2hlci0+
Z29CYWNrKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKERl
ZkJ1dHRvblByb2MsIGhEbGcsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9Cit9CisK
K0xSRVNVTFQgQ0FMTEJBQ0sgRm9yd2FyZEJ1dHRvblByb2MoSFdORCBoRGxnLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgc3dpdGNoIChtZXNzYWdl
KSB7CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgICAgIGdXaW5MYXVuY2hlci0+Z29Gb3J3
YXJkKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKERlZkJ1
dHRvblByb2MsIGhEbGcsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9Cit9CisKKy8v
IE1lc3NhZ2UgaGFuZGxlciBmb3IgYWJvdXQgYm94LgorSU5UX1BUUiBDQUxMQkFDSyBBYm91dChI
V05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sK
KyAgICBVTlJFRkVSRU5DRURfUEFSQU1FVEVSKGxQYXJhbSk7CisgICAgc3dpdGNoIChtZXNzYWdl
KSB7CisgICAgY2FzZSBXTV9JTklURElBTE9HOgorICAgICAgICByZXR1cm4gKElOVF9QVFIpVFJV
RTsKKworICAgIGNhc2UgV01fQ09NTUFORDoKKyAgICAgICAgaWYgKExPV09SRCh3UGFyYW0pID09
IElET0sgfHwgTE9XT1JEKHdQYXJhbSkgPT0gSURDQU5DRUwpIHsKKyAgICAgICAgICAgIEVuZERp
YWxvZyhoRGxnLCBMT1dPUkQod1BhcmFtKSk7CisgICAgICAgICAgICByZXR1cm4gKElOVF9QVFIp
VFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIChJTlRf
UFRSKUZBTFNFOworfQorCitzdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgcGFzc2VkVVJMKQorewor
ICAgIGlmIChGQUlMRUQoZ1dpbkxhdW5jaGVyLT5sb2FkVVJMKHBhc3NlZFVSTCkpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTZXRGb2N1cyhnVmlld1dpbmRvdyk7Cit9CisKK2V4dGVybiAiQyIg
X19kZWNsc3BlYyhkbGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KEhJ
TlNUQU5DRSBoSW5zdGFuY2UsIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLCBMUFdTVFIgbHBzdHJD
bWRMaW5lLCBpbnQgbkNtZFNob3cpCit7CisgICAgcmV0dXJuIHdXaW5NYWluKGhJbnN0YW5jZSwg
aFByZXZJbnN0YW5jZSwgbHBzdHJDbWRMaW5lLCBuQ21kU2hvdyk7Cit9CkluZGV4OiBUb29scy9X
aW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1
bmNoZXIvRE9NRGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiAxNzAyOTkpCShmcm9tIFRvb2xzL1dp
bkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmg6MTcwMjk5KQorKysgVG9vbHMvV2luTGF1bmNoZXIv
RE9NRGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgSm9obnNvbi4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVudCBGdWxnaGFtLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBET01EZWZhdWx0SW1wbF9oCisjZGVmaW5lIERPTURlZmF1bHRJbXBsX2gKKworI2luY2x1ZGUg
PFdlYktpdC9XZWJLaXQuaD4KKworY2xhc3MgV2ViU2NyaXB0T2JqZWN0IDogcHVibGljIElXZWJT
Y3JpcHRPYmplY3QgeworcHVibGljOgorICAgIFdlYlNjcmlwdE9iamVjdCgpIDogbV9yZWZDb3Vu
dCgwKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJTY3JpcHRPYmplY3QoKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7
CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7CisgICAg
dmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOworCisgICAgLy8g
SVdlYlNjcmlwdE9iamVjdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0
aHJvd0V4Y2VwdGlvbihCU1RSLCBCT09MKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNhbGxXZWJTY3JpcHRNZXRob2QoQlNUUiwg
Y29uc3QgVkFSSUFOVFtdLCBpbnQsIFZBUklBTlQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZXZhbHVhdGVXZWJTY3JpcHQoQlNU
UiwgVkFSSUFOVCopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSByZW1vdmVXZWJTY3JpcHRLZXkoQlNUUikgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHN0cmluZ1JlcHJl
c2VudGF0aW9uKEJTVFIqKSB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViU2NyaXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwg
VkFSSUFOVCopICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwgVkFS
SUFOVCkgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBzZXRFeGNlcHRpb24oQlNUUikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgVUxPTkcgbV9yZWZDb3VudDsKK307CisKKworY2xhc3MgRE9NT2JqZWN0
IDogcHVibGljIFdlYlNjcmlwdE9iamVjdCwgcHVibGljIElET01PYmplY3QgeworcHVibGljOgor
ICAgIC8vIElVbmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1
ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsKK307CisKKworY2xh
c3MgRE9NRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBET01PYmplY3QsIHB1YmxpYyBJRE9NRXZlbnRM
aXN0ZW5lciB7CitwdWJsaWM6CisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZP
YmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQp
OworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsKKwor
ICAgIC8vIElXZWJTY3JpcHRPYmplY3QKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgdGhyb3dFeGNlcHRpb24oQlNUUiwgQk9PTCopICB7IHJldHVybiBFX05PVElNUEw7IH0K
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2FsbFdlYlNjcmlwdE1ldGhv
ZChCU1RSLCBjb25zdCBWQVJJQU5UW10sIGludCwgVkFSSUFOVCopICB7IHJldHVybiBFX05PVElN
UEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZXZhbHVhdGVXZWJT
Y3JpcHQoQlNUUiwgVkFSSUFOVCopICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2NyaXB0S2V5KEJTVFIpICB7IHJl
dHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
c3RyaW5nUmVwcmVzZW50YXRpb24oQlNUUiopICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViU2NyaXB0VmFsdWVBdEluZGV4KHVu
c2lnbmVkIGludCwgVkFSSUFOVCopICB7IHJldHVybiBFX05PVElNUEw7IH0KKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4KHVuc2ln
bmVkIGludCwgVkFSSUFOVCkgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24oQlNUUikgeyByZXR1cm4gRV9OT1RJ
TVBMOyB9CisKKyAgICAvLyBJRE9NRXZlbnRMaXN0ZW5lcgorICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBoYW5kbGVFdmVudChJRE9NRXZlbnQqKSB7IHJldHVybiBFX05PVElN
UEw7IH0KK307CisKKy8vIElVbmtub3duIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hSRVNVTFQgV2ViU2NyaXB0T2Jq
ZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAg
ICAqcHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3du
KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJTY3JpcHRPYmplY3QqPih0
aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVdlYlNjcmlwdE9iamVj
dCkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViU2NyaXB0T2JqZWN0Kj4o
dGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKKworICAgIEFk
ZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBXZWJTY3JpcHRPYmplY3Q6OkFk
ZFJlZih2b2lkKQoreworICAgIHJldHVybiArK21fcmVmQ291bnQ7Cit9CisKK1VMT05HIFdlYlNj
cmlwdE9iamVjdDo6UmVsZWFzZSh2b2lkKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZD
b3VudDsKKyAgICBpZiAoIW5ld1JlZikKKyAgICAgICAgZGVsZXRlKHRoaXMpOworCisgICAgcmV0
dXJuIG5ld1JlZjsKK30KKworLy8gRE9NT2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hSRVNVTFQgRE9NT2Jq
ZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAg
ICAqcHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lET01PYmpl
Y3QpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURPTU9iamVjdCo+KHRoaXMp
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdlYlNjcmlwdE9iamVjdDo6UXVlcnlJbnRlcmZh
Y2UocmlpZCwgcHB2T2JqZWN0KTsKKworICAgIFdlYlNjcmlwdE9iamVjdDo6QWRkUmVmKCk7Cisg
ICAgcmV0dXJuIFNfT0s7Cit9CisKKworLy8gRE9NRXZlbnRMaXN0ZW5lciAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitI
UkVTVUxUIERPTUV2ZW50TGlzdGVuZXI6OlF1ZXJ5SW50ZXJmYWNlKGNvbnN0IElJRCAmcmlpZCwg
dm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVh
bEdVSUQocmlpZCwgSUlEX0lET01FdmVudExpc3RlbmVyKSkKKyAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElET01FdmVudExpc3RlbmVyKj4odGhpcyk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gRE9NT2JqZWN0OjpRdWVyeUludGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOworCisg
ICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIERPTUV2ZW50TGlzdGVu
ZXI6OkFkZFJlZih2b2lkKQoreworICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OkFkZFJlZigp
OworfQorCitVTE9ORyBET01FdmVudExpc3RlbmVyOjpSZWxlYXNlKHZvaWQpCit7CisgICAgcmV0
dXJuIFdlYlNjcmlwdE9iamVjdDo6UmVsZWFzZSgpOworfQorCisjZW5kaWYKSW5kZXg6IFRvb2xz
L1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5M
YXVuY2hlci9ET01EZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFRvb2xzL1dpbkxh
dW5jaGVyL0RPTURlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDUgQEAK
IC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgSm9obnNvbi4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBCcmVudCBGdWxnaGFtLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKQEAgLTI0LDY4ICsyNSw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIERPTURlZmF1bHRJbXBsX2gKLSNkZWZpbmUgRE9NRGVmYXVsdEltcGxfaAotCi0jaW5j
bHVkZSA8V2ViS2l0L1dlYktpdC5oPgotCi1jbGFzcyBXZWJTY3JpcHRPYmplY3QgOiBwdWJsaWMg
SVdlYlNjcmlwdE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgV2ViU2NyaXB0T2JqZWN0KCkgOiBtX3Jl
ZkNvdW50KDApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfldlYlNjcmlwdE9iamVjdCgp
Ci0gICAgewotICAgIH0KLQotICAgIC8vIElVbmtub3duCi0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2Jq
ZWN0KTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsK
LSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7Ci0KLSAg
ICAvLyBJV2ViU2NyaXB0T2JqZWN0Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHRocm93RXhjZXB0aW9uKEJTVFIsIEJPT0wqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2FsbFdlYlNjcmlwdE1ldGhvZChC
U1RSLCBjb25zdCBWQVJJQU5UW10sIGludCwgVkFSSUFOVCopIHsgcmV0dXJuIEVfTk9USU1QTDsg
fQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBldmFsdWF0ZVdlYlNjcmlw
dChCU1RSLCBWQVJJQU5UKikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHJlbW92ZVdlYlNjcmlwdEtleShCU1RSKSB7IHJldHVybiBF
X05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc3RyaW5n
UmVwcmVzZW50YXRpb24oQlNUUiopIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJTY3JpcHRWYWx1ZUF0SW5kZXgodW5zaWduZWQg
aW50LCBWQVJJQU5UKikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXgodW5zaWduZWQgaW50
LCBWQVJJQU5UKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHNldEV4Y2VwdGlvbihCU1RSKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBVTE9ORyBtX3JlZkNvdW50OwotfTsKLQotCi1jbGFzcyBET01P
YmplY3QgOiBwdWJsaWMgV2ViU2NyaXB0T2JqZWN0LCBwdWJsaWMgSURPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgLy8gSVVua25vd24KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOwotfTsKLQot
Ci1jbGFzcyBET01FdmVudExpc3RlbmVyIDogcHVibGljIERPTU9iamVjdCwgcHVibGljIElET01F
dmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICAvLyBJVW5rbm93bgotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoq
IHBwdk9iamVjdCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYo
dm9pZCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQp
OwotCi0gICAgLy8gSVdlYlNjcmlwdE9iamVjdAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSB0aHJvd0V4Y2VwdGlvbihCU1RSLCBCT09MKikgIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjYWxsV2ViU2NyaXB0
TWV0aG9kKEJTVFIsIGNvbnN0IFZBUklBTlRbXSwgaW50LCBWQVJJQU5UKikgIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBldmFsdWF0
ZVdlYlNjcmlwdChCU1RSLCBWQVJJQU5UKikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZW1vdmVXZWJTY3JpcHRLZXkoQlNUUikg
IHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBzdHJpbmdSZXByZXNlbnRhdGlvbihCU1RSKikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJTY3JpcHRWYWx1ZUF0SW5k
ZXgodW5zaWduZWQgaW50LCBWQVJJQU5UKikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRXZWJTY3JpcHRWYWx1ZUF0SW5kZXgo
dW5zaWduZWQgaW50LCBWQVJJQU5UKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEV4Y2VwdGlvbihCU1RSKSB7IHJldHVybiBF
X05PVElNUEw7IH0KLQotICAgIC8vIElET01FdmVudExpc3RlbmVyCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGhhbmRsZUV2ZW50KElET01FdmVudCopIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQotfTsKKyNpbmNsdWRlICJzdGRhZnguaCIKKyNpbmNsdWRlICJET01EZWZhdWx0
SW1wbC5oIgogCiAvLyBJVW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBIUkVTVUxUIFdlYlNjcmlwdE9iamVj
dDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCkBAIC0xNTIs
NSArOTMsMyBAQCBVTE9ORyBET01FdmVudExpc3RlbmVyOjpSZWxlYXNlKHZvaWQpCiB7CiAgICAg
cmV0dXJuIFdlYlNjcmlwdE9iamVjdDo6UmVsZWFzZSgpOwogfQotCi0jZW5kaWYKSW5kZXg6IFRv
b2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2lu
TGF1bmNoZXIvRE9NRGVmYXVsdEltcGwuaAkocmV2aXNpb24gMTcwMjk5KQorKysgVG9vbHMvV2lu
TGF1bmNoZXIvRE9NRGVmYXVsdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNzAgKzg3LDQg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBoYW5kbGVF
dmVudChJRE9NRXZlbnQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KIH07CiAKLS8vIElVbmtub3du
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLUhSRVNVTFQgV2ViU2NyaXB0T2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJ
SUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICAqcHB2T2JqZWN0ID0gMDsKLSAgICBp
ZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKLSAgICAgICAgKnBwdk9iamVjdCA9
IHN0YXRpY19jYXN0PElXZWJTY3JpcHRPYmplY3QqPih0aGlzKTsKLSAgICBlbHNlIGlmIChJc0Vx
dWFsR1VJRChyaWlkLCBJSURfSVdlYlNjcmlwdE9iamVjdCkpCi0gICAgICAgICpwcHZPYmplY3Qg
PSBzdGF0aWNfY2FzdDxJV2ViU2NyaXB0T2JqZWN0Kj4odGhpcyk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gRV9OT0lOVEVSRkFDRTsKLQotICAgIEFkZFJlZigpOwotICAgIHJldHVybiBTX09L
OwotfQotCi1VTE9ORyBXZWJTY3JpcHRPYmplY3Q6OkFkZFJlZih2b2lkKQotewotICAgIHJldHVy
biArK21fcmVmQ291bnQ7Ci19Ci0KLVVMT05HIFdlYlNjcmlwdE9iamVjdDo6UmVsZWFzZSh2b2lk
KQotewotICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKLSAgICBpZiAoIW5ld1JlZikK
LSAgICAgICAgZGVsZXRlKHRoaXMpOwotCi0gICAgcmV0dXJuIG5ld1JlZjsKLX0KLQotLy8gRE9N
T2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLUhSRVNVTFQgRE9NT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJ
SUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAgICAqcHB2T2JqZWN0ID0gMDsKLSAgICBp
ZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lET01PYmplY3QpKQotICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SURPTU9iamVjdCo+KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIFdlYlNjcmlwdE9iamVjdDo6UXVlcnlJbnRlcmZhY2UocmlpZCwgcHB2T2JqZWN0KTsKLQot
ICAgIFdlYlNjcmlwdE9iamVjdDo6QWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLQot
Ly8gRE9NRXZlbnRMaXN0ZW5lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1IUkVTVUxUIERPTUV2ZW50TGlzdGVuZXI6
OlF1ZXJ5SW50ZXJmYWNlKGNvbnN0IElJRCAmcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKLXsKLSAg
ICAqcHB2T2JqZWN0ID0gMDsKLSAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lET01FdmVu
dExpc3RlbmVyKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElET01FdmVudExp
c3RlbmVyKj4odGhpcyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gRE9NT2JqZWN0OjpRdWVy
eUludGVyZmFjZShyaWlkLCBwcHZPYmplY3QpOwotCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KLVVMT05HIERPTUV2ZW50TGlzdGVuZXI6OkFkZFJlZih2b2lkKQotewotICAg
IHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OkFkZFJlZigpOwotfQotCi1VTE9ORyBET01FdmVudExp
c3RlbmVyOjpSZWxlYXNlKHZvaWQpCi17Ci0gICAgcmV0dXJuIFdlYlNjcmlwdE9iamVjdDo6UmVs
ZWFzZSgpOwotfQotCiAjZW5kaWYKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHJl
dmlzaW9uIDE3MDI5OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRv
ciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXgg
Q2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0yOSw5ICsyOSw3IEBACiAjaW5j
bHVkZSAic3RkYWZ4LmgiCiAjaW5jbHVkZSAiV2luTGF1bmNoZXIuaCIKIAotI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIgogI2luY2x1ZGUgIkRPTURlZmF1bHRJbXBsLmgiCi0jaW5j
bHVkZSAiUHJpbnRXZWJVSURlbGVnYXRlLmgiCiAjaW5jbHVkZSAiV2luTGF1bmNoZXJMaWJSZXNv
dXJjZS5oIgogI2luY2x1ZGUgIldpbkxhdW5jaGVyUmVwbGFjZS5oIgogI2luY2x1ZGUgPFdlYktp
dC9XZWJLaXRDT01BUEkuaD4KQEAgLTQyLDE5MSArNDAsMTQzIEBACiAjaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ0ZSdW5Mb29wLmg+CiAjZW5kaWYKIAotI2lmIFVTRShHTElCKQotI2luY2x1ZGUg
PGdsaWIuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGFzc2Vy
dC5oPgotI2luY2x1ZGUgPGNvbWlwLmg+Ci0jaW5jbHVkZSA8Y29tbWN0cmwuaD4KLSNpbmNsdWRl
IDxjb21tZGxnLmg+Ci0jaW5jbHVkZSA8Y29tdXRpbC5oPgotI2luY2x1ZGUgPGRiZ2hlbHAuaD4K
KyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8b2Jq
YmFzZS5oPgotI2luY2x1ZGUgPHNoZWxsYXBpLmg+Ci0jaW5jbHVkZSA8c2hsb2JqLmg+Ci0jaW5j
bHVkZSA8c2hsd2FwaS5oPgorI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzdHJpbmc+CiAj
aW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHdpbmluZXQuaD4KLQotI2RlZmluZSBNQVhfTE9B
RFNUUklORyAxMDAKLSNkZWZpbmUgVVJMQkFSX0hFSUdIVCAgMjQKLSNkZWZpbmUgQ09OVFJPTEJV
VFRPTl9XSURUSCAyNAogCiBzdGF0aWMgY29uc3QgaW50IG1heEhpc3RvcnlTaXplID0gMTA7CiAK
LXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1lLCAmX191dWlkb2YoSVdlYkZy
YW1lKT4+IElXZWJGcmFtZVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkhp
c3RvcnksICZfX3V1aWRvZihJV2ViSGlzdG9yeSk+PiBJV2ViSGlzdG9yeVB0cjsKLXR5cGVkZWYg
X2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkhpc3RvcnlJdGVtLCAmX191dWlkb2YoSVdlYkhpc3Rv
cnlJdGVtKT4+IElXZWJIaXN0b3J5SXRlbVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYkluc3BlY3RvciwgJl9fdXVpZG9mKElXZWJJbnNwZWN0b3IpPj4gSVdlYkluc3BlY3Rv
clB0cjsKIHR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYk11dGFibGVVUkxSZXF1ZXN0
LCAmX191dWlkb2YoSVdlYk11dGFibGVVUkxSZXF1ZXN0KT4+IElXZWJNdXRhYmxlVVJMUmVxdWVz
dFB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlByZWZlcmVuY2VzLCAmX191
dWlkb2YoSVdlYlByZWZlcmVuY2VzKT4+IElXZWJQcmVmZXJlbmNlc1B0cjsKLXR5cGVkZWYgX2Nv
bV9wdHJfdDxfY29tX0lJSUQ8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZSwgJl9fdXVpZG9mKElXZWJQ
cmVmZXJlbmNlc1ByaXZhdGUpPj4gSVdlYlByZWZlcmVuY2VzUHJpdmF0ZVB0cjsKLXR5cGVkZWYg
X2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZpZXcsICZfX3V1aWRvZihJV2ViVmlldyk+PiBJV2Vi
Vmlld1B0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZpZXdQcml2YXRlLCAm
X191dWlkb2YoSVdlYlZpZXdQcml2YXRlKT4+IElXZWJWaWV3UHJpdmF0ZVB0cjsKIHR5cGVkZWYg
X2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkNhY2hlLCAmX191dWlkb2YoSVdlYkNhY2hlKT4+IElX
ZWJDYWNoZVB0cjsKIAotLy8gR2xvYmFsIFZhcmlhYmxlczoKLUhJTlNUQU5DRSBoSW5zdDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgaW5zdGFuY2UKLUhXTkQgaE1h
aW5XbmQ7Ci1IV05EIGhVUkxCYXJXbmQ7Ci1IV05EIGhCYWNrQnV0dG9uV25kOwotSFdORCBoRm9y
d2FyZEJ1dHRvblduZDsKLVdORFBST0MgRGVmRWRpdFByb2MgPSAwOwotV05EUFJPQyBEZWZCdXR0
b25Qcm9jID0gMDsKLVdORFBST0MgRGVmV2ViS2l0UHJvYyA9IDA7Ci1JV2ViSW5zcGVjdG9yUHRy
IGdJbnNwZWN0b3I7Ci1JV2ViVmlld1B0ciBnV2ViVmlldzsKLUlXZWJWaWV3UHJpdmF0ZVB0ciBn
V2ViVmlld1ByaXZhdGU7Ci1JV2ViUHJlZmVyZW5jZXNQdHIgZ1N0YW5kYXJkUHJlZmVyZW5jZXM7
Ci1JV2ViUHJlZmVyZW5jZXNQcml2YXRlUHRyIGdQcmVmc1ByaXZhdGU7Ci1IV05EIGdWaWV3V2lu
ZG93ID0gMDsKLVdpbkxhdW5jaGVyV2ViSG9zdCogZ1dlYkhvc3QgPSAwOwotUHJpbnRXZWJVSURl
bGVnYXRlKiBnUHJpbnREZWxlZ2F0ZSA9IDA7Ci1BY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGdBY2Nl
c3NpYmlsaXR5RGVsZWdhdGUgPSAwOwotSVdlYkhpc3RvcnlQdHIgZ1dlYkhpc3Rvcnk7Ci1zdGQ6
OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW1QdHI+IGdIaXN0b3J5SXRlbXM7Ci1UQ0hBUiBzelRpdGxl
W01BWF9MT0FEU1RSSU5HXTsgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0aXRsZSBiYXIgdGV4
dAotVENIQVIgc3pXaW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107ICAgICAgICAgICAgLy8gdGhl
IG1haW4gd2luZG93IGNsYXNzIG5hbWUKLQotLy8gU3VwcG9ydCBtb3ZpbmcgdGhlIHRyYW5zcGFy
ZW50IHdpbmRvdwotUE9JTlQgc193aW5kb3dQb3NpdGlvbiA9IHsgMTAwLCAxMDAgfTsKLVNJWkUg
c193aW5kb3dTaXplID0geyA4MDAsIDQwMCB9OwotYm9vbCBzX3VzZXNMYXllcmVkV2ViVmlldyA9
IGZhbHNlOwotYm9vbCBzX2Z1bGxEZXNrdG9wID0gZmFsc2U7Ci0KLS8vIEZvcndhcmQgZGVjbGFy
YXRpb25zIG9mIGZ1bmN0aW9ucyBpbmNsdWRlZCBpbiB0aGlzIGNvZGUgbW9kdWxlOgotQVRPTSAg
ICAgICAgICAgICAgICBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNFIGhJbnN0YW5jZSk7Ci1MUkVT
VUxUIENBTExCQUNLICAgIFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotSU5U
X1BUUiBDQUxMQkFDSyAgICBBYm91dChIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVT
VUxUIENBTExCQUNLICAgIEVkaXRQcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUxS
RVNVTFQgQ0FMTEJBQ0sgICAgQmFja0J1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOwotTFJFU1VMVCBDQUxMQkFDSyAgICBGb3J3YXJkQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBX
UEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLICAgIFJlbG9hZEJ1dHRvblByb2MoSFdO
RCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotCi1zdGF0aWMgdm9pZCBsb2FkVVJMKEJTVFIgdXJs
QlN0cik7Ci0KLXN0YXRpYyBib29sIHVzZXNMYXllcmVkV2ViVmlldygpCitXaW5MYXVuY2hlcjo6
V2luTGF1bmNoZXIoSFdORCBtYWluV25kLCBIV05EIHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVk
V2ViVmlldykKKyAgICA6IG1faE1haW5XbmQobWFpblduZCkKKyAgICAsIG1faFVSTEJhclduZCh1
cmxCYXJXbmQpCisgICAgLCBtX3VzZUxheWVyZWRXZWJWaWV3KHVzZUxheWVyZWRXZWJWaWV3KQog
ewotICAgIHJldHVybiBzX3VzZXNMYXllcmVkV2ViVmlldzsKIH0KIAotc3RhdGljIGJvb2wgc2hv
dWxkVXNlRnVsbERlc2t0b3AoKQorSFJFU1VMVCBXaW5MYXVuY2hlcjo6aW5pdCgpCiB7Ci0gICAg
cmV0dXJuIHNfZnVsbERlc2t0b3A7Ci19Ci0KLWNsYXNzIFNpbXBsZUV2ZW50TGlzdGVuZXIgOiBw
dWJsaWMgRE9NRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAgU2ltcGxlRXZlbnRMaXN0ZW5l
cihMUFdTVFIgdHlwZSkKLSAgICB7Ci0gICAgICAgIHdjc25jcHlfcyhtX2V2ZW50VHlwZSwgMTAw
LCB0eXBlLCAxMDApOwotICAgICAgICBtX2V2ZW50VHlwZVs5OV0gPSAwOwotICAgIH0KKyAgICBI
UkVTVUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lX
ZWJWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQ
dHIoKSkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CiAKLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgaGFuZGxlRXZlbnQoSURPTUV2ZW50KiBl
dnQpCi0gICAgewotICAgICAgICB3Y2hhcl90IG1lc3NhZ2VbMjU1XTsKLSAgICAgICAgd2NzY3B5
X3MobWVzc2FnZSwgMjU1LCBtX2V2ZW50VHlwZSk7Ci0gICAgICAgIHdjc2NhdF9zKG1lc3NhZ2Us
IDI1NSwgTCIgZXZlbnQgZmlyZWQhIik7Ci0gICAgICAgIDo6TWVzc2FnZUJveCgwLCBtZXNzYWdl
LCBMIkV2ZW50IEhhbmRsZXIiLCBNQl9PSyk7Ci0gICAgICAgIHJldHVybiBTX09LOwotICAgIH0K
KyAgICBociA9IG1fd2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJWaWV3UHJpdmF0ZSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXdQcml2YXRlLkdldEludGVyZmFjZVB0
cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKIAotcHJpdmF0
ZToKLSAgICB3Y2hhcl90IG1fZXZlbnRUeXBlWzEwMF07Ci19OworICAgIGhyID0gV2ViS2l0Q3Jl
YXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwgX191dWlkb2YobV93ZWJIaXN0b3J5KSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYkhpc3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkp
KTsKIAotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRGF0YVNvdXJjZSwgJl9fdXVp
ZG9mKElXZWJEYXRhU291cmNlKT4+IElXZWJEYXRhU291cmNlUHRyOworICAgIHJldHVybiBocjsK
K30KIAotSFJFU1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OnVwZGF0ZUFkZHJlc3NCYXIoSVdlYlZp
ZXcqIHdlYlZpZXcpCitIUkVTVUxUIFdpbkxhdW5jaGVyOjpwcmVwYXJlVmlld3MoSFdORCBtYWlu
V25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0LCBjb25zdCBCU1RSJiByZXF1ZXN0ZWRVUkwsIEhX
TkQmIHZpZXdId25kKQogewotICAgIElXZWJGcmFtZVB0ciBtYWluRnJhbWU7Ci0gICAgSFJFU1VM
VCBociA9IHdlYlZpZXctPm1haW5GcmFtZSgmbWFpbkZyYW1lLkdldEludGVyZmFjZVB0cigpKTsK
KyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIEhSRVNV
TFQgaHIgPSBtX3dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFO
RExFPihtYWluV25kKSk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gaHI7CiAKLSAgICBJV2ViRGF0YVNvdXJjZVB0ciBkYXRhU291cmNlOwot
ICAgIGhyID0gbWFpbkZyYW1lLT5kYXRhU291cmNlKCZkYXRhU291cmNlLkdldEludGVyZmFjZVB0
cigpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSB8fCAhZGF0YVNvdXJjZSkKLSAgICAgICAgaHIgPSBt
YWluRnJhbWUtPnByb3Zpc2lvbmFsRGF0YVNvdXJjZSgmZGF0YVNvdXJjZS5HZXRJbnRlcmZhY2VQ
dHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikgfHwgIWRhdGFTb3VyY2UpCi0gICAgICAgIHJldHVy
biAwOworICAgIGhyID0gbV93ZWJWaWV3LT5pbml0V2l0aEZyYW1lKGNsaWVudFJlY3QsIDAsIDAp
OworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CiAKLSAgICBJV2ViTXV0
YWJsZVVSTFJlcXVlc3RQdHIgcmVxdWVzdDsKLSAgICBociA9IGRhdGFTb3VyY2UtPnJlcXVlc3Qo
JnJlcXVlc3QuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpIHx8ICFyZXF1
ZXN0KQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXJlcXVlc3RlZFVSTCkgeworICAgICAg
ICBJV2ViRnJhbWVQdHIgZnJhbWU7CisgICAgICAgIGhyID0gbV93ZWJWaWV3LT5tYWluRnJhbWUo
JmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKKyAgICAgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgICAgICByZXR1cm4gaHI7CiAKLSAgICBfYnN0cl90IGZyYW1lVVJMOwotICAgIGhyID0gcmVx
dWVzdC0+bWFpbkRvY3VtZW50VVJMKGZyYW1lVVJMLkdldEFkZHJlc3MoKSk7CisgICAgICAgIGZy
YW1lLT5sb2FkSFRNTFN0cmluZyhfYnN0cl90KGRlZmF1bHRIVE1MKS5HZXRCU1RSKCksIDApOwor
ICAgIH0KKworICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQobV91c2VM
YXllcmVkV2ViVmlldyk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG1fd2ViVmlld1ByaXZhdGUtPnNldFVzZXNM
YXllcmVkV2luZG93KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CiAKLSAgICA6OlNlbmRNZXNzYWdlKGhVUkxCYXJXbmQsIHN0YXRp
Y19jYXN0PFVJTlQ+KFdNX1NFVFRFWFQpLCAwLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oZnJh
bWVVUkwuR2V0QlNUUigpKSk7CisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3V2luZG93
KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZ2aWV3SHduZCkpOwogCi0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGhyOwogfQogCi1IUkVTVUxUIFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElXZWJFcnJvciAqZXJyb3Is
IElXZWJGcmFtZSopCitIUkVTVUxUIFdpbkxhdW5jaGVyOjpzZXRGcmFtZUxvYWREZWxlZ2F0ZShJ
V2ViRnJhbWVMb2FkRGVsZWdhdGUqIGZyYW1lTG9hZERlbGVnYXRlKQogewotICAgIF9ic3RyX3Qg
ZXJyb3JEZXNjcmlwdGlvbjsKLSAgICBIUkVTVUxUIGhyID0gZXJyb3ItPmxvY2FsaXplZERlc2Ny
aXB0aW9uKGVycm9yRGVzY3JpcHRpb24uR2V0QWRkcmVzcygpKTsKLSAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IEwiRmFpbGVkIHRvIGxvYWQgcGFnZSBhbmQg
dG8gbG9jYWxpemUgZXJyb3IgZGVzY3JpcHRpb24uIjsKLQotICAgIGlmIChfd2NzaWNtcChlcnJv
ckRlc2NyaXB0aW9uLCBMIkNhbmNlbGxlZCIpKQotICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIHN0
YXRpY19jYXN0PExQQ1dTVFI+KGVycm9yRGVzY3JpcHRpb24pLCBMIkVycm9yIiwgTUJfQVBQTE1P
REFMIHwgTUJfT0spOworICAgIG1fZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0
ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRGcmFtZUxvYWREZWxlZ2F0ZShmcmFtZUxvYWRE
ZWxlZ2F0ZSk7Cit9CiAKLSAgICByZXR1cm4gU19PSzsKK0hSRVNVTFQgV2luTGF1bmNoZXI6OnNl
dFVJRGVsZWdhdGUoSVdlYlVJRGVsZWdhdGUqIHVpRGVsZWdhdGUpCit7CisgICAgbV91aURlbGVn
YXRlID0gdWlEZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRVSURlbGVnYXRlKHVp
RGVsZWdhdGUpOwogfQogCi1IUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdpbkxhdW5jaGVyV2Vi
SG9zdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCitIUkVT
VUxUIFdpbkxhdW5jaGVyOjpzZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoSUFjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZSogYWNjZXNzaWJpbGl0eURlbGVnYXRlKQogewotICAgICpwcHZPYmplY3QgPSAwOwot
ICAgIGlmIChJc0VxdWFsR1VJRChyaWlkLCBJSURfSVVua25vd24pKQotICAgICAgICAqcHB2T2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkZyYW1lTG9hZERlbGVnYXRlKj4odGhpcyk7Ci0gICAgZWxz
ZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0ZSkpCi0gICAg
ICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViRnJhbWVMb2FkRGVsZWdhdGUqPih0aGlz
KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworICAgIG1fYWNjZXNz
aWJpbGl0eURlbGVnYXRlID0gYWNjZXNzaWJpbGl0eURlbGVnYXRlOworICAgIHJldHVybiBtX3dl
YlZpZXctPnNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShhY2Nlc3NpYmlsaXR5RGVsZWdhdGUpOwor
fQogCi0gICAgQWRkUmVmKCk7Ci0gICAgcmV0dXJuIFNfT0s7CitJV2ViRnJhbWVQdHIgV2luTGF1
bmNoZXI6Om1haW5GcmFtZSgpCit7CisgICAgSVdlYkZyYW1lUHRyIGZyYW1lUHRyOworICAgIG1f
d2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZVB0ci5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgcmV0
dXJuIGZyYW1lUHRyOwogfQogCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBXaW5MYXVuY2hlcldl
Ykhvc3Q6OkFkZFJlZih2b2lkKQorYm9vbCBXaW5MYXVuY2hlcjo6c2VlZEluaXRpYWxEZWZhdWx0
UHJlZmVyZW5jZXMoKQogewotICAgIHJldHVybiArK21fcmVmQ291bnQ7CisgICAgSVdlYlByZWZl
cmVuY2VzUHRyIHRtcFByZWZlcmVuY2VzOworICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5z
dGFuY2UoQ0xTSURfV2ViUHJlZmVyZW5jZXMsIDAsIElJRF9JV2ViUHJlZmVyZW5jZXMsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdG1wUHJlZmVyZW5jZXMuR2V0SW50ZXJmYWNlUHRyKCkpKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChGQUlMRUQodG1wUHJlZmVyZW5jZXMt
PnN0YW5kYXJkUHJlZmVyZW5jZXMoJm1fc3RhbmRhcmRQcmVmZXJlbmNlcy5HZXRJbnRlcmZhY2VQ
dHIoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
VUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgV2luTGF1bmNoZXJXZWJIb3N0OjpSZWxlYXNlKHZvaWQp
Citib29sIFdpbkxhdW5jaGVyOjpzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpCiB7Ci0gICAgVUxP
TkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OwotICAgIGlmICghbmV3UmVmKQotICAgICAgICBkZWxl
dGUodGhpcyk7CisgICAgSFJFU1VMVCBociA9IG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+UXVlcnlJ
bnRlcmZhY2UoSUlEX0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmbV9wcmVmc1ByaXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoIVNVQ0NF
RURFRChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIFVTRShDRykKKyAgICBtX3N0
YW5kYXJkUHJlZmVyZW5jZXMtPnNldEFWRm91bmRhdGlvbkVuYWJsZWQoVFJVRSk7CisgICAgbV9w
cmVmc1ByaXZhdGUtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKFRSVUUpOworI2Vu
ZGlmCisKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQoVFJVRSk7Cisg
ICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3dEZWJ1Z0JvcmRlcnMoRkFMU0UpOworICAgIG1fcHJl
ZnNQcml2YXRlLT5zZXRTaG93UmVwYWludENvdW50ZXIoRkFMU0UpOworCisgICAgbV9zdGFuZGFy
ZFByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoVFJVRSk7CisgICAgbV9w
cmVmc1ByaXZhdGUtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKFRSVUUpOworICAgIG1f
c3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoVFJVRSk7CisgICAgbV9w
cmVmc1ByaXZhdGUtPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEZBTFNFKTsK
KyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFRSVUUp
OwogCi0gICAgcmV0dXJuIG5ld1JlZjsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZChUUlVFKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgdm9p
ZCB1cGRhdGVNZW51SXRlbUZvckhpc3RvcnlJdGVtKEhNRU5VIG1lbnUsIElXZWJIaXN0b3J5SXRl
bSYgaGlzdG9yeUl0ZW0sIGludCBjdXJyZW50SGlzdG9yeUl0ZW0pCiB7CiAgICAgVUlOVCBtZW51
SUQgPSBJRE1fSElTVE9SWV9MSU5LMCArIGN1cnJlbnRIaXN0b3J5SXRlbTsKIAotICAgIE1FTlVJ
VEVNSU5GTyBtZW51SXRlbUluZm8gPSB7MH07CisgICAgTUVOVUlURU1JTkZPIG1lbnVJdGVtSW5m
byA9IHsgMCB9OwogICAgIG1lbnVJdGVtSW5mby5jYlNpemUgPSBzaXplb2YoTUVOVUlURU1JTkZP
KTsKICAgICBtZW51SXRlbUluZm8uZk1hc2sgPSBNSUlNX1RZUEU7CiAgICAgbWVudUl0ZW1JbmZv
LmZUeXBlID0gTUZUX1NUUklORzsKQEAgLTIzOSw5ICsxODksOSBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVNZW51SXRlbUZvckhpc3RvcnlJdGVtCiAgICAgOjpFbmFibGVNZW51SXRlbShtZW51LCBtZW51
SUQsIE1GX0JZQ09NTUFORCB8IE1GX0VOQUJMRUQpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93TGFz
dFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYgd2ViVmlldykKK3ZvaWQgV2luTGF1bmNoZXI6OnNob3dM
YXN0VmlzaXRlZFNpdGVzKElXZWJWaWV3JiB3ZWJWaWV3KQogewotICAgIEhNRU5VIG1lbnUgPSA6
OkdldE1lbnUoaE1haW5XbmQpOworICAgIEhNRU5VIG1lbnUgPSA6OkdldE1lbnUobV9oTWFpbldu
ZCk7CiAKICAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViQmFja0ZvcndhcmRMaXN0LCAmX191
dWlkb2YoSVdlYkJhY2tGb3J3YXJkTGlzdCk+PiBiYWNrRm9yd2FyZExpc3Q7CiAgICAgSFJFU1VM
VCBociA9IHdlYlZpZXcuYmFja0ZvcndhcmRMaXN0KCZiYWNrRm9yd2FyZExpc3QuR2V0SW50ZXJm
YWNlUHRyKCkpOwpAQCAtMjc0LDEyICsyMjQsMTIgQEAgc3RhdGljIHZvaWQgc2hvd0xhc3RWaXNp
dGVkU2l0ZXMoSVdlYlZpZQogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBociA9IGdXZWJIaXN0b3J5LT5hZGRJdGVtcygxLCAmY3VycmVudEl0ZW0uR2V0SW50ZXJm
YWNlUHRyKCkpOworICAgIGhyID0gbV93ZWJIaXN0b3J5LT5hZGRJdGVtcygxLCAmY3VycmVudEl0
ZW0uR2V0SW50ZXJmYWNlUHRyKCkpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1
cm47CiAKICAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeVByaXZhdGUsICZfX3V1
aWRvZihJV2ViSGlzdG9yeVByaXZhdGUpPj4gd2ViSGlzdG9yeTsKLSAgICBociA9IGdXZWJIaXN0
b3J5LT5RdWVyeUludGVyZmFjZShJSURfSVdlYkhpc3RvcnlQcml2YXRlLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJndlYkhpc3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBociA9IG1f
d2ViSGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJIaXN0b3J5UHJpdmF0ZSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJIaXN0b3J5LkdldEludGVyZmFjZVB0cigpKSk7CiAgICAg
aWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjg4LDcgKzIzOCw3IEBAIHN0
YXRpYyB2b2lkIHNob3dMYXN0VmlzaXRlZFNpdGVzKElXZWJWaWUKICAgICBpZiAoRkFJTEVEKGhy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ0hpc3RvcnlJdGVtcy5yZXNpemUodG90YWxMaXN0
Q291bnQpOworICAgIG1faGlzdG9yeUl0ZW1zLnJlc2l6ZSh0b3RhbExpc3RDb3VudCk7CiAKICAg
ICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW0qPiBoaXN0b3J5VG9Mb2FkKHRvdGFsTGlzdENv
dW50KTsKICAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgaGlz
dG9yeVRvTG9hZC5kYXRhKCkpOwpAQCAtMjk2LDggKzI0Niw4IEBAIHN0YXRpYyB2b2lkIHNob3dM
YXN0VmlzaXRlZFNpdGVzKElXZWJWaWUKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2l6ZV90IGkg
PSAwOwotICAgIGZvciAoYXV0byBjdXIgPSBoaXN0b3J5VG9Mb2FkLmJlZ2luKCk7IGN1ciAhPSBo
aXN0b3J5VG9Mb2FkLmVuZCgpOyArK2N1cikgewotICAgICAgICBnSGlzdG9yeUl0ZW1zW2ldLkF0
dGFjaCgqY3VyKTsKKyAgICBmb3IgKGF1dG8mIGN1ciA6IGhpc3RvcnlUb0xvYWQpIHsKKyAgICAg
ICAgbV9oaXN0b3J5SXRlbXNbaV0uQXR0YWNoKGN1cik7CiAgICAgICAgICsraTsKICAgICB9CiAK
QEAgLTMwNyw3ICsyNTcsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2Vi
VmllCiAKICAgICBpbnQgY3VycmVudEhpc3RvcnlJdGVtID0gMDsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHRvdGFsTGlzdENvdW50OyArK2kpIHsKLSAgICAgICAgdXBkYXRlTWVudUl0ZW1Gb3JI
aXN0b3J5SXRlbShtZW51LCAqKGdIaXN0b3J5SXRlbXNbYWxsSXRlbXNPZmZzZXQgKyBjdXJyZW50
SGlzdG9yeUl0ZW1dKSwgY3VycmVudEhpc3RvcnlJdGVtKTsKKyAgICAgICAgdXBkYXRlTWVudUl0
ZW1Gb3JIaXN0b3J5SXRlbShtZW51LCAqKG1faGlzdG9yeUl0ZW1zW2FsbEl0ZW1zT2Zmc2V0ICsg
Y3VycmVudEhpc3RvcnlJdGVtXSksIGN1cnJlbnRIaXN0b3J5SXRlbSk7CiAgICAgICAgICsrY3Vy
cmVudEhpc3RvcnlJdGVtOwogICAgIH0KIApAQCAtMzE2LDczNyArMjY2LDk2IEBAIHN0YXRpYyB2
b2lkIHNob3dMYXN0VmlzaXRlZFNpdGVzKElXZWJWaWUKICAgICAgICAgOjpFbmFibGVNZW51SXRl
bShtZW51LCBJRE1fSElTVE9SWV9MSU5LMCArIGksIE1GX0JZQ09NTUFORCB8IE1GX0RJU0FCTEVE
KTsKIH0KIAotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJRE9NRG9jdW1lbnQsICZfX3V1
aWRvZihJRE9NRG9jdW1lbnQpPj4gSURPTURvY3VtZW50UHRyOwotdHlwZWRlZiBfY29tX3B0cl90
PF9jb21fSUlJRDxJRE9NRWxlbWVudCwgJl9fdXVpZG9mKElET01FbGVtZW50KT4+IElET01FbGVt
ZW50UHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJRE9NRXZlbnRUYXJnZXQsICZf
X3V1aWRvZihJRE9NRXZlbnRUYXJnZXQpPj4gSURPTUV2ZW50VGFyZ2V0UHRyOwotCi1IUkVTVUxU
IFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKElXZWJWaWV3KiB3ZWJW
aWV3LCBJV2ViRnJhbWUqIGZyYW1lKQotewotICAgIElET01Eb2N1bWVudFB0ciBkb2M7Ci0gICAg
ZnJhbWUtPkRPTURvY3VtZW50KCZkb2MuR2V0SW50ZXJmYWNlUHRyKCkpOwotCi0gICAgSURPTUVs
ZW1lbnRQdHIgZWxlbWVudDsKLSAgICBJRE9NRXZlbnRUYXJnZXRQdHIgdGFyZ2V0OwotCi0gICAg
c2hvd0xhc3RWaXNpdGVkU2l0ZXMoKndlYlZpZXcpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBp
cyBmb3IgdGhlIHRlc3QgcGFnZToKLSAgICBIUkVTVUxUIGhyID0gZG9jLT5nZXRFbGVtZW50QnlJ
ZChMIndlYmtpdCBsb2dvIiwgJmVsZW1lbnQuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBlbGVtZW50LT5R
dWVyeUludGVyZmFjZShJSURfSURPTUV2ZW50VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJnRhcmdldC5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSB0YXJnZXQtPmFkZEV2ZW50TGlzdGVuZXIo
TCJjbGljayIsIG5ldyBTaW1wbGVFdmVudExpc3RlbmVyIChMIndlYmtpdCBsb2dvIGNsaWNrIiks
IEZBTFNFKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIHJldHVybiBocjsKLX0KLQotc3RhdGljIHZvaWQgcmVzaXplU3ViVmlld3MoKQordm9pZCBX
aW5MYXVuY2hlcjo6bGF1bmNoSW5zcGVjdG9yKCkKIHsKLSAgICBpZiAodXNlc0xheWVyZWRXZWJW
aWV3KCkgfHwgIWdWaWV3V2luZG93KQorICAgIGlmICghbV93ZWJWaWV3UHJpdmF0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUkVDVCByY0NsaWVudDsKLSAgICBHZXRDbGllbnRSZWN0KGhNYWlu
V25kLCAmcmNDbGllbnQpOwotICAgIE1vdmVXaW5kb3coaEJhY2tCdXR0b25XbmQsIDAsIDAsIENP
TlRST0xCVVRUT05fV0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3co
aEZvcndhcmRCdXR0b25XbmQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIENPTlRST0xCVVRUT05f
V0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwg
Q09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBVUkxCQVJfSEVJR0hU
LCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBVUkxCQVJfSEVJR0hULCBy
Y0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tIC0gVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCi17Ci0gICAgaE1haW5X
bmQgPSBnVmlld1dpbmRvdzsKLSNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8IGRlZmluZWQgX1dJTjY0
Ci0gICAgRGVmV2ViS2l0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oOjpHZXRXaW5k
b3dMb25nUHRyKGhNYWluV25kLCBHV0xQX1dORFBST0MpKTsKLSAgICA6OlNldFdpbmRvd0xvbmdQ
dHIoaE1haW5XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oV25k
UHJvYykpOwotI2Vsc2UKLSAgICBEZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQ
Uk9DPig6OkdldFdpbmRvd0xvbmcoaE1haW5XbmQsIEdXTF9XTkRQUk9DKSk7Ci0gICAgOjpTZXRX
aW5kb3dMb25nKGhNYWluV25kLCBHV0xfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BU
Uj4oV25kUHJvYykpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGNvbXB1dGVGdWxsRGVza3Rv
cEZyYW1lKCkKLXsKLSAgICBSRUNUIGRlc2t0b3A7Ci0gICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRl
cnNJbmZvKFNQSV9HRVRXT1JLQVJFQSwgMCwgc3RhdGljX2Nhc3Q8dm9pZCo+KCZkZXNrdG9wKSwg
MCkpCisgICAgaWYgKCFTVUNDRUVERUQobV93ZWJWaWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZtX2lu
c3BlY3Rvci5HZXRJbnRlcmZhY2VQdHIoKSkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzX3dp
bmRvd1Bvc2l0aW9uLnggPSAwOwotICAgIHNfd2luZG93UG9zaXRpb24ueSA9IDA7Ci0gICAgc193
aW5kb3dTaXplLmN4ID0gZGVza3RvcC5yaWdodCAtIGRlc2t0b3AubGVmdDsKLSAgICBzX3dpbmRv
d1NpemUuY3kgPSBkZXNrdG9wLmJvdHRvbSAtIGRlc2t0b3AudG9wOworICAgIG1faW5zcGVjdG9y
LT5zaG93KCk7CiB9CiAKLUJPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNl
LCBEV09SRCByZWFzb24sIExQVk9JRCkKK3ZvaWQgV2luTGF1bmNoZXI6Om5hdmlnYXRlRm9yd2Fy
ZE9yQmFja3dhcmQoSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKIHsKLSAgICBpZiAocmVhc29uID09
IERMTF9QUk9DRVNTX0FUVEFDSCkKLSAgICAgICAgaEluc3QgPSBkbGxJbnN0YW5jZTsKLQotICAg
IHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9ic3RyX3Qm
IGRpcmVjdG9yeSkKLXsKLSAgICB3Y2hhcl90IGFwcERhdGFEaXJlY3RvcnlbTUFYX1BBVEhdOwot
ICAgIGlmIChGQUlMRUQoU0hHZXRGb2xkZXJQYXRoVygwLCBDU0lETF9MT0NBTF9BUFBEQVRBIHwg
Q1NJRExfRkxBR19DUkVBVEUsIDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgd2NoYXJfdCBleGVjdXRhYmxlUGF0aFtNQVhfUEFUSF07Ci0gICAg
OjpHZXRNb2R1bGVGaWxlTmFtZVcoMCwgZXhlY3V0YWJsZVBhdGgsIE1BWF9QQVRIKTsKLSAgICA6
OlBhdGhSZW1vdmVFeHRlbnNpb25XKGV4ZWN1dGFibGVQYXRoKTsKLQotICAgIGRpcmVjdG9yeSA9
IF9ic3RyX3QoYXBwRGF0YURpcmVjdG9yeSkgKyBMIlxcIiArIDo6UGF0aEZpbmRGaWxlTmFtZVco
ZXhlY3V0YWJsZVBhdGgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHNl
dFRvRGVmYXVsdFByZWZlcmVuY2VzKCkKLXsKLSAgICBIUkVTVUxUIGhyID0gZ1N0YW5kYXJkUHJl
ZmVyZW5jZXMtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmdQcmVmc1ByaXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIFVT
RShDRykKLSAgICBnU3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChU
UlVFKTsKLSAgICBnUHJlZnNQcml2YXRlLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZChUUlVFKTsKLSNlbmRpZgotCi0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0RnVsbFNjcmVlbkVuYWJs
ZWQoVFJVRSk7Ci0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0U2hvd0RlYnVnQm9yZGVycyhGQUxTRSk7
Ci0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKEZBTFNFKTsKLQotICAg
IGdTdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoVFJVRSk7
Ci0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSk7
Ci0gICAgZ1N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRFbmFibGVkKFRSVUUpOwot
ICAgIGdQcmVmc1ByaXZhdGUtPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEZB
TFNFKTsKLSAgICBnUHJlZnNQcml2YXRlLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
VFJVRSk7Ci0KLSAgICBnUHJlZnNQcml2YXRlLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKFRS
VUUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIHNldENhY2hlRm9sZGVy
KCkKLXsKLSAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGU7Ci0KLSAgICBIUkVTVUxUIGhyID0gV2Vi
S2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViQ2FjaGUsIDAsIF9fdXVpZG9mKHdlYkNhY2hlKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJDYWNoZS5HZXRJbnRlcmZhY2VQdHIoKSkpOwot
ICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBfYnN0cl90
IGFwcERhdGFGb2xkZXI7Ci0gICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGFwcERhdGFGb2xkZXIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhcHBEYXRhRm9sZGVyICs9IEwiXFxjYWNo
ZSI7Ci0gICAgd2ViQ2FjaGUtPnNldENhY2hlRm9sZGVyKGFwcERhdGFGb2xkZXIpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgY3JlYXRlQ3Jhc2hSZXBvcnQoRVhDRVBUSU9OX1BPSU5U
RVJTKiBleGNlcHRpb25Qb2ludGVycykKLXsKLSAgICBfYnN0cl90IGRpcmVjdG9yeTsKLQotICAg
IGlmICghZ2V0QXBwRGF0YUZvbGRlcihkaXJlY3RvcnkpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoOjpTSENyZWF0ZURpcmVjdG9yeUV4KDAsIGRpcmVjdG9yeSwgMCkgIT0gRVJST1JfU1VD
Q0VTUwotICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0ZJTEVfRVhJU1RTCi0g
ICAgICAgICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQUxSRUFEWV9FWElTVFMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHN0ZDo6d3N0cmluZyBmaWxlTmFtZSA9IGRpcmVjdG9yeSArIEwi
XFxDcmFzaFJlcG9ydC5kbXAiOwotICAgIEhBTkRMRSBtaW5pRHVtcEZpbGUgPSA6OkNyZWF0ZUZp
bGUoZmlsZU5hbWUuY19zdHIoKSwgR0VORVJJQ19XUklURSwgMCwgMCwgQ1JFQVRFX0FMV0FZUywg
RklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKLQotICAgIGlmIChtaW5pRHVtcEZpbGUgJiYgbWlu
aUR1bXBGaWxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0KLSAgICAgICAgTUlOSURVTVBf
RVhDRVBUSU9OX0lORk9STUFUSU9OIG1kZWk7Ci0gICAgICAgIG1kZWkuVGhyZWFkSWQgPSA6Okdl
dEN1cnJlbnRUaHJlYWRJZCgpOwotICAgICAgICBtZGVpLkV4Y2VwdGlvblBvaW50ZXJzICA9IGV4
Y2VwdGlvblBvaW50ZXJzOwotICAgICAgICBtZGVpLkNsaWVudFBvaW50ZXJzID0gMDsKLQotI2lm
ZGVmIF9ERUJVRwotICAgICAgICBNSU5JRFVNUF9UWVBFIGR1bXBUeXBlID0gTWluaUR1bXBXaXRo
RnVsbE1lbW9yeTsKLSNlbHNlCi0gICAgICAgIE1JTklEVU1QX1RZUEUgZHVtcFR5cGUgPSBNaW5p
RHVtcE5vcm1hbDsKLSNlbmRpZgotCi0gICAgICAgIDo6TWluaUR1bXBXcml0ZUR1bXAoOjpHZXRD
dXJyZW50UHJvY2VzcygpLCA6OkdldEN1cnJlbnRQcm9jZXNzSWQoKSwgbWluaUR1bXBGaWxlLCBk
dW1wVHlwZSwgJm1kZWksIDAsIDApOwotICAgICAgICA6OkNsb3NlSGFuZGxlKG1pbmlEdW1wRmls
ZSk7Ci0gICAgICAgIHByb2Nlc3NDcmFzaFJlcG9ydChmaWxlTmFtZS5jX3N0cigpKTsKLSAgICB9
Ci19Ci0KLWludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UsIFBXU1RSLCBp
bnQgbkNtZFNob3cpCi17Ci0jaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKLSAgICBfQ3J0U2V0UmVw
b3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwotICAgIF9DcnRTZXRSZXBv
cnRNb2RlKF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOwotI2VuZGlmCi0KLSAgICAgLy8g
VE9ETzogUGxhY2UgY29kZSBoZXJlLgotICAgIE1TRyBtc2cgPSB7MH07Ci0gICAgSEFDQ0VMIGhB
Y2NlbFRhYmxlOwotCi0gICAgSU5JVENPTU1PTkNPTlRST0xTRVggSW5pdEN0cmxFeDsKLQotICAg
IEluaXRDdHJsRXguZHdTaXplID0gc2l6ZW9mKElOSVRDT01NT05DT05UUk9MU0VYKTsKLSAgICBJ
bml0Q3RybEV4LmR3SUNDICA9IDB4MDAwMDQwMDA7IC8vSUNDX1NUQU5EQVJEX0NMQVNTRVM7Ci0g
ICAgSW5pdENvbW1vbkNvbnRyb2xzRXgoJkluaXRDdHJsRXgpOwotCi0gICAgX2JzdHJfdCByZXF1
ZXN0ZWRVUkw7Ci0gICAgaW50IGFyZ2MgPSAwOwotICAgIFdDSEFSKiogYXJndiA9IENvbW1hbmRM
aW5lVG9Bcmd2VyhHZXRDb21tYW5kTGluZVcoKSwgJmFyZ2MpOwotICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgYXJnYzsgKytpKSB7Ci0gICAgICAgIGlmICghd2NzaWNtcChhcmd2W2ldLCBMIi0tdHJh
bnNwYXJlbnQiKSkKLSAgICAgICAgICAgIHNfdXNlc0xheWVyZWRXZWJWaWV3ID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLWRlc2t0b3AiKSkKLSAgICAgICAg
ICAgIHNfZnVsbERlc2t0b3AgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghcmVxdWVzdGVkVVJM
KQotICAgICAgICAgICAgcmVxdWVzdGVkVVJMID0gYXJndltpXTsKLSAgICB9Ci0KLSAgICAvLyBJ
bml0aWFsaXplIGdsb2JhbCBzdHJpbmdzCi0gICAgTG9hZFN0cmluZyhoSW5zdCwgSURTX0FQUF9U
SVRMRSwgc3pUaXRsZSwgTUFYX0xPQURTVFJJTkcpOwotICAgIExvYWRTdHJpbmcoaEluc3QsIElE
Q19XSU5MQVVOQ0hFUiwgc3pXaW5kb3dDbGFzcywgTUFYX0xPQURTVFJJTkcpOwotICAgIE15UmVn
aXN0ZXJDbGFzcyhoSW5zdCk7Ci0KLSAgICBpZiAoc2hvdWxkVXNlRnVsbERlc2t0b3AoKSkKLSAg
ICAgICAgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKLQotICAgIC8vIEluaXQgQ09NCi0gICAg
T2xlSW5pdGlhbGl6ZShOVUxMKTsKLQotICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcoKSkgewot
ICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJVCIsIEwiVHlwZSBVUkwgSGVy
ZSIsCi0gICAgICAgICAgICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5ET1cgfCBXU19WSVNJQkxF
IHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAKLSAgICAgICAgICAgICAg
ICAgICAgc193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1Np
emUuY3ksIHNfd2luZG93U2l6ZS5jeCwgVVJMQkFSX0hFSUdIVCwKLSAgICAgICAgICAgICAgICAg
ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgaEluc3Qs
IDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGhNYWluV25kID0gQ3JlYXRlV2luZG93KHN6V2lu
ZG93Q2xhc3MsIHN6VGl0bGUsIFdTX09WRVJMQVBQRURXSU5ET1csCi0gICAgICAgICAgICAgICAg
ICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0LCAw
KTsKLQotICAgICAgICBpZiAoIWhNYWluV25kKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwot
Ci0gICAgICAgIGhCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8Iiwg
V1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIGhNYWluV25kLCAw
LCBoSW5zdCwgMCk7Ci0gICAgICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwi
QlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIENPTlRST0xC
VVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7Ci0gICAgICAgIGhV
UkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxF
IHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBDT05UUk9MQlVUVE9OX1dJ
RFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKLQotICAgICAgICBTaG93
V2luZG93KGhNYWluV25kLCBuQ21kU2hvdyk7Ci0gICAgICAgIFVwZGF0ZVdpbmRvdyhoTWFpbldu
ZCk7Ci0gICAgfQotCi0gICAgRGVmRWRpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+
KEdldFdpbmRvd0xvbmdQdHIoaFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7Ci0gICAgRGVmQnV0
dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihoQmFj
a0J1dHRvblduZCwgR1dMUF9XTkRQUk9DKSk7Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoVVJMQmFy
V25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9jKSk7
Ci0gICAgU2V0V2luZG93TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWlu
dGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOwotICAgIFNldFdpbmRvd0xv
bmdQdHIoaEZvcndhcmRCdXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxM
T05HX1BUUj4oRm9yd2FyZEJ1dHRvblByb2MpKTsKLQotICAgIFNldEZvY3VzKGhVUkxCYXJXbmQp
OwotCi0gICAgUkVDVCBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93
UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRv
d1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKLQotICAgIElXZWJQcmVmZXJlbmNlc1B0
ciB0bXBQcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENM
U0lEX1dlYlByZWZlcmVuY2VzLCAwLCBJSURfSVdlYlByZWZlcmVuY2VzLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJnRtcFByZWZlcmVuY2VzLkdldEludGVyZmFjZVB0cigpKSkpKQotICAgICAg
ICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAoRkFJTEVEKHRtcFByZWZlcmVuY2VzLT5zdGFuZGFyZFBy
ZWZlcmVuY2VzKCZnU3RhbmRhcmRQcmVmZXJlbmNlcy5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAg
ICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBpZiAoIXNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCkpCi0g
ICAgICAgIGdvdG8gZXhpdDsKLQotICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5j
ZShDTFNJRF9XZWJWaWV3LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmZ1dlYlZpZXcuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAg
ICAgICAgZ290byBleGl0OwotCi0gICAgaHIgPSBnV2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lXZWJWaWV3UHJpdmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZnV2ViVmlld1ByaXZh
dGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgZ290
byBleGl0OwotCi0gICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5
LCAwLCBfX3V1aWRvZihnV2ViSGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZ1dl
Ykhpc3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAg
ICAgZ290byBleGl0OwotCi0gICAgaWYgKCFzZXRDYWNoZUZvbGRlcigpKQotICAgICAgICBnb3Rv
IGV4aXQ7Ci0KLSAgICBnV2ViSG9zdCA9IG5ldyBXaW5MYXVuY2hlcldlYkhvc3QoKTsKLSAgICBn
V2ViSG9zdC0+QWRkUmVmKCk7Ci0gICAgaHIgPSBnV2ViVmlldy0+c2V0RnJhbWVMb2FkRGVsZWdh
dGUoZ1dlYkhvc3QpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0K
LSAgICBnUHJpbnREZWxlZ2F0ZSA9IG5ldyBQcmludFdlYlVJRGVsZWdhdGU7Ci0gICAgZ1ByaW50
RGVsZWdhdGUtPkFkZFJlZigpOwotICAgIGhyID0gZ1dlYlZpZXctPnNldFVJRGVsZWdhdGUoZ1By
aW50RGVsZWdhdGUpOwotICAgIGlmIChGQUlMRUQgKGhyKSkKLSAgICAgICAgZ290byBleGl0Owot
Ci0gICAgZ0FjY2Vzc2liaWxpdHlEZWxlZ2F0ZSA9IG5ldyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGU7
Ci0gICAgZ0FjY2Vzc2liaWxpdHlEZWxlZ2F0ZS0+QWRkUmVmKCk7Ci0gICAgaHIgPSBnV2ViVmll
dy0+c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKGdBY2Nlc3NpYmlsaXR5RGVsZWdhdGUpOwotICAg
IGlmIChGQUlMRUQgKGhyKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaHIgPSBnV2ViVmll
dy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KGhNYWluV25kKSk7
Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ1dl
YlZpZXctPmluaXRXaXRoRnJhbWUoY2xpZW50UmVjdCwgMCwgMCk7Ci0gICAgaWYgKEZBSUxFRCho
cikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGlmICghcmVxdWVzdGVkVVJMKSB7Ci0gICAg
ICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICAgICAgaHIgPSBnV2ViVmlldy0+bWFpbkZyYW1l
KCZmcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhfYnN0
cl90KGRlZmF1bHRIVE1MKS5HZXRCU1RSKCksIDApOwotICAgIH0KLQotICAgIGhyID0gZ1dlYlZp
ZXdQcml2YXRlLT5zZXRUcmFuc3BhcmVudCh1c2VzTGF5ZXJlZFdlYlZpZXcoKSk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ1dlYlZpZXdQcml2
YXRlLT5zZXRVc2VzTGF5ZXJlZFdpbmRvdyh1c2VzTGF5ZXJlZFdlYlZpZXcoKSk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gZ1dlYlZpZXdQcml2
YXRlLT52aWV3V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRSo+KCZnVmlld1dpbmRv
dykpOwotICAgIGlmIChGQUlMRUQoaHIpIHx8ICFnVmlld1dpbmRvdykKLSAgICAgICAgZ290byBl
eGl0OwotCi0gICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldygpKQotICAgICAgICBzdWJjbGFzc0Zv
ckxheWVyZWRXaW5kb3coKTsKLQotICAgIHJlc2l6ZVN1YlZpZXdzKCk7Ci0KLSAgICBTaG93V2lu
ZG93KGdWaWV3V2luZG93LCBuQ21kU2hvdyk7Ci0gICAgVXBkYXRlV2luZG93KGdWaWV3V2luZG93
KTsKLQotICAgIGhBY2NlbFRhYmxlID0gTG9hZEFjY2VsZXJhdG9ycyhoSW5zdCwgTUFLRUlOVFJF
U09VUkNFKElEQ19XSU5MQVVOQ0hFUikpOwotCi0gICAgaWYgKHJlcXVlc3RlZFVSTC5sZW5ndGgo
KSkKLSAgICAgICAgbG9hZFVSTChyZXF1ZXN0ZWRVUkwuR2V0QlNUUigpKTsKLQotI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6NDUwOSkKLQotICAgIC8vIE1haW4gbWVzc2FnZSBsb29wOgotICAgIF9f
dHJ5IHsKLSAgICAgICAgd2hpbGUgKEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCkpIHsKLSNpZiBV
U0UoQ0YpCi0gICAgICAgICAgICBDRlJ1bkxvb3BSdW5Jbk1vZGUoa0NGUnVuTG9vcERlZmF1bHRN
b2RlLCAwLCB0cnVlKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKCFUcmFuc2xhdGVBY2NlbGVy
YXRvcihtc2cuaHduZCwgaEFjY2VsVGFibGUsICZtc2cpKSB7Ci0gICAgICAgICAgICAgICAgVHJh
bnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoJm1z
Zyk7Ci0gICAgICAgICAgICB9Ci0jaWYgVVNFKEdMSUIpCi0gICAgICAgICAgICBnX21haW5fY29u
dGV4dF9pdGVyYXRpb24oMCwgZmFsc2UpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9IF9fZXhj
ZXB0KGNyZWF0ZUNyYXNoUmVwb3J0KEdldEV4Y2VwdGlvbkluZm9ybWF0aW9uKCkpLCBFWENFUFRJ
T05fRVhFQ1VURV9IQU5ETEVSKSB7IH0KLQotZXhpdDoKLSAgICBnUHJpbnREZWxlZ2F0ZS0+UmVs
ZWFzZSgpOwotCi0gICAgc2h1dERvd25XZWJLaXQoKTsKLSNpZmRlZiBfQ1JUREJHX01BUF9BTExP
QwotICAgIF9DcnREdW1wTWVtb3J5TGVha3MoKTsKLSNlbmRpZgotCi0gICAgLy8gU2h1dCBkb3du
IENPTS4KLSAgICBPbGVVbmluaXRpYWxpemUoKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50Pihtc2cud1BhcmFtKTsKLX0KLQotQVRPTSBNeVJlZ2lzdGVyQ2xhc3MoSElOU1RBTkNF
IGhJbnN0YW5jZSkKLXsKLSAgICBXTkRDTEFTU0VYIHdjZXg7Ci0KLSAgICB3Y2V4LmNiU2l6ZSA9
IHNpemVvZihXTkRDTEFTU0VYKTsKLQotICAgIHdjZXguc3R5bGUgICAgICAgICAgPSBDU19IUkVE
UkFXIHwgQ1NfVlJFRFJBVzsKLSAgICB3Y2V4LmxwZm5XbmRQcm9jICAgID0gV25kUHJvYzsKLSAg
ICB3Y2V4LmNiQ2xzRXh0cmEgICAgID0gMDsKLSAgICB3Y2V4LmNiV25kRXh0cmEgICAgID0gMDsK
LSAgICB3Y2V4LmhJbnN0YW5jZSAgICAgID0gaEluc3RhbmNlOwotICAgIHdjZXguaEljb24gICAg
ICAgICAgPSBMb2FkSWNvbihoSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfV0lOTEFVTkNI
RVIpKTsKLSAgICB3Y2V4LmhDdXJzb3IgICAgICAgID0gTG9hZEN1cnNvcihOVUxMLCBJRENfQVJS
T1cpOwotICAgIHdjZXguaGJyQmFja2dyb3VuZCAgPSAwOwotICAgIHdjZXgubHBzek1lbnVOYW1l
ICAgPSBNQUtFSU5UUkVTT1VSQ0UoSURDX1dJTkxBVU5DSEVSKTsKLSAgICB3Y2V4Lmxwc3pDbGFz
c05hbWUgID0gc3pXaW5kb3dDbGFzczsKLSAgICB3Y2V4LmhJY29uU20gICAgICAgID0gTG9hZElj
b24od2NleC5oSW5zdGFuY2UsIE1BS0VJTlRSRVNPVVJDRShJRElfU01BTEwpKTsKLQotICAgIHJl
dHVybiBSZWdpc3RlckNsYXNzRXgoJndjZXgpOwotfQotCi1zdGF0aWMgQk9PTCBDQUxMQkFDSyBB
Ym9ydFByb2MoSERDIGhEQywgaW50IEVycm9yKQotewotICAgIE1TRyBtc2c7Ci0gICAgd2hpbGUg
KDo6UGVla01lc3NhZ2UoJm1zZywgMCwgMCwgMCwgUE1fUkVNT1ZFKSkgewotICAgICAgICA6OlRy
YW5zbGF0ZU1lc3NhZ2UoJm1zZyk7Ci0gICAgICAgIDo6RGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwot
ICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgSERDIGdldFByaW50ZXJEQygp
Ci17Ci0gICAgUFJJTlRETEcgcGRsZzsKLSAgICBtZW1zZXQoJnBkbGcsIDAsIHNpemVvZihQUklO
VERMRykpOwotICAgIHBkbGcubFN0cnVjdFNpemUgPSBzaXplb2YoUFJJTlRETEcpOwotICAgIHBk
bGcuRmxhZ3MgPSBQRF9QUklOVFNFVFVQIHwgUERfUkVUVVJOREM7Ci0KLSAgICA6OlByaW50RGxn
KCZwZGxnKTsKLQotICAgIHJldHVybiBwZGxnLmhEQzsKLX0KLQotc3RhdGljIHZvaWQgaW5pdERv
Y1N0cnVjdChET0NJTkZPKiBkaSwgVENIQVIqIGRvY25hbWUpCi17Ci0gICAgbWVtc2V0KGRpLCAw
LCBzaXplb2YoRE9DSU5GTykpOwotICAgIGRpLT5jYlNpemUgPSBzaXplb2YoRE9DSU5GTyk7Ci0g
ICAgZGktPmxwc3pEb2NOYW1lID0gZG9jbmFtZTsKLX0KLQotdHlwZWRlZiBfY29tX3B0cl90PF9j
b21fSUlJRDxJV2ViRnJhbWVQcml2YXRlLCAmX191dWlkb2YoSVdlYkZyYW1lUHJpdmF0ZSk+PiBJ
V2ViRnJhbWVQcml2YXRlUHRyOwotCi12b2lkIFByaW50VmlldyhIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBIREMgcHJpbnREQyA9
IGdldFByaW50ZXJEQygpOwotICAgIGlmICghcHJpbnREQykgewotICAgICAgICA6Ok1lc3NhZ2VC
b3hXKDAsIEwiRXJyb3IgY3JlYXRpbmcgcHJpbnRpbmcgREMiLCBMIkVycm9yIiwgTUJfQVBQTE1P
REFMIHwgTUJfT0spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKDo6U2V0QWJv
cnRQcm9jKHByaW50REMsIEFib3J0UHJvYykgPT0gU1BfRVJST1IpIHsKLSAgICAgICAgOjpNZXNz
YWdlQm94VygwLCBMIkVycm9yIHNldHRpbmcgdXAgQWJvcnRQcm9jIiwgTCJFcnJvciIsIE1CX0FQ
UExNT0RBTCB8IE1CX09LKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElXZWJGcmFt
ZVB0ciBmcmFtZTsKLSAgICBJV2ViRnJhbWVQcml2YXRlUHRyIGZyYW1lUHJpdmF0ZTsKLSAgICBp
ZiAoRkFJTEVEKGdXZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChGQUlMRUQoZnJhbWUtPlF1ZXJ5SW50ZXJmYWNl
KCZmcmFtZVByaXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZnJhbWVQcml2YXRlLT5zZXRJblByaW50aW5nTW9kZShUUlVFLCBwcmludERDKTsKLQotICAg
IFVJTlQgcGFnZUNvdW50ID0gMDsKLSAgICBmcmFtZVByaXZhdGUtPmdldFByaW50ZWRQYWdlQ291
bnQocHJpbnREQywgJnBhZ2VDb3VudCk7Ci0KLSAgICBET0NJTkZPIGRpOwotICAgIGluaXREb2NT
dHJ1Y3QoJmRpLCBMIldlYktpdCBEb2MiKTsKLSAgICA6OlN0YXJ0RG9jKHByaW50REMsICZkaSk7
Ci0KLSAgICAvLyBGSVhNRTogTmVlZCBDb3JlR3JhcGhpY3MgaW1wbGVtZW50YXRpb24KLSAgICB2
b2lkKiBncmFwaGljc0NvbnRleHQgPSAwOwotICAgIGZvciAoc2l6ZV90IHBhZ2UgPSAxOyBwYWdl
IDw9IHBhZ2VDb3VudDsgKytwYWdlKSB7Ci0gICAgICAgIDo6U3RhcnRQYWdlKHByaW50REMpOwot
ICAgICAgICBmcmFtZVByaXZhdGUtPnNwb29sUGFnZXMocHJpbnREQywgcGFnZSwgcGFnZSwgZ3Jh
cGhpY3NDb250ZXh0KTsKLSAgICAgICAgOjpFbmRQYWdlKHByaW50REMpOwotICAgIH0KLQotICAg
IGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoRkFMU0UsIHByaW50REMpOwotCi0gICAg
OjpFbmREb2MocHJpbnREQyk7Ci0gICAgOjpEZWxldGVEQyhwcmludERDKTsKLX0KLQotc3RhdGlj
IHZvaWQgVG9nZ2xlTWVudUl0ZW0oSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKLXsKLSAgICBITUVO
VSBtZW51ID0gOjpHZXRNZW51KGhXbmQpOwotCi0gICAgTUVOVUlURU1JTkZPIGluZm87Ci0gICAg
OjptZW1zZXQoJmluZm8sIDB4MDAsIHNpemVvZihpbmZvKSk7Ci0gICAgaW5mby5jYlNpemUgPSBz
aXplb2YoaW5mbyk7Ci0gICAgaW5mby5mTWFzayA9IE1JSU1fU1RBVEU7Ci0KLSAgICBpZiAoITo6
R2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1lbnVJRCwgRkFMU0UsICZpbmZvKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQk9PTCBuZXdTdGF0ZSA9ICEoaW5mby5mU3RhdGUgJiBNRlNfQ0hFQ0tFRCk7
Ci0KLSAgICBpZiAoIWdTdGFuZGFyZFByZWZlcmVuY2VzIHx8ICFnUHJlZnNQcml2YXRlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1lbnVJRCkgewotICAgIGNhc2UgSURNX0FWRk9V
TkRBVElPTjoKLSAgICAgICAgZ1N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEFWRm91bmRhdGlvbkVu
YWJsZWQobmV3U3RhdGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9BQ0NfQ09NUE9T
SVRJTkc6Ci0gICAgICAgIGdQcmVmc1ByaXZhdGUtPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKG5ld1N0YXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fV0tfRlVMTFND
UkVFTjoKLSAgICAgICAgZ1ByZWZzUHJpdmF0ZS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQobmV3U3Rh
dGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9DT01QT1NJVElOR19CT1JERVJTOgot
ICAgICAgICBnUHJlZnNQcml2YXRlLT5zZXRTaG93RGVidWdCb3JkZXJzKG5ld1N0YXRlKTsKLSAg
ICAgICAgZ1ByZWZzUHJpdmF0ZS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKG5ld1N0YXRlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fRElTQUJMRV9JTUFHRVM6Ci0gICAgICAgIGdTdGFu
ZGFyZFByZWZlcmVuY2VzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoIW5ld1N0YXRlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fRElTQUJMRV9TVFlMRVM6Ci0gICAgICAgIGdQ
cmVmc1ByaXZhdGUtPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCFuZXdTdGF0ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJU0FCTEVfSkFWQVNDUklQVDoKLSAgICAgICAg
Z1N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRFbmFibGVkKCFuZXdTdGF0ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJU0FCTEVfTE9DQUxfRklMRV9SRVNUUklDVElP
TlM6Ci0gICAgICAgIGdQcmVmc1ByaXZhdGUtPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZp
bGVVUkxzKG5ld1N0YXRlKTsKLSAgICAgICAgZ1ByZWZzUHJpdmF0ZS0+c2V0QWxsb3dGaWxlQWNj
ZXNzRnJvbUZpbGVVUkxzKG5ld1N0YXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aW5mby5mU3RhdGUgPSAobmV3U3RhdGUpID8gTUZTX0NIRUNLRUQgOiBNRlNfVU5DSEVDS0VEOwot
Ci0gICAgOjpTZXRNZW51SXRlbUluZm8obWVudSwgbWVudUlELCBGQUxTRSwgJmluZm8pOwotfQot
Ci1zdGF0aWMgdm9pZCBMYXVuY2hJbnNwZWN0b3IoSFdORCBod25kKQotewotICAgIGlmICghZ1dl
YlZpZXdQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVNVQ0NFRURFRChnV2Vi
Vmlld1ByaXZhdGUtPmluc3BlY3RvcigmZ0luc3BlY3Rvci5HZXRJbnRlcmZhY2VQdHIoKSkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBnSW5zcGVjdG9yLT5zaG93KCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIE5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKLXsK
LSAgICBpZiAoIWdXZWJWaWV3KQorICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47
CiAKICAgICBCT09MIHdlbnRCYWNrT3JGb3J3YXJkID0gRkFMU0U7CiAgICAgaWYgKElETV9ISVNU
T1JZX0ZPUldBUkQgPT0gbWVudUlEKQotICAgICAgICBnV2ViVmlldy0+Z29Gb3J3YXJkKCZ3ZW50
QmFja09yRm9yd2FyZCk7CisgICAgICAgIG1fd2ViVmlldy0+Z29Gb3J3YXJkKCZ3ZW50QmFja09y
Rm9yd2FyZCk7CiAgICAgZWxzZQotICAgICAgICBnV2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFja09y
Rm9yd2FyZCk7CisgICAgICAgIG1fd2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFja09yRm9yd2FyZCk7
CiB9CiAKLXN0YXRpYyB2b2lkIE5hdmlnYXRlVG9IaXN0b3J5KEhXTkQgaFduZCwgVUlOVCBtZW51
SUQpCit2b2lkIFdpbkxhdW5jaGVyOjpuYXZpZ2F0ZVRvSGlzdG9yeShIV05EIGhXbmQsIFVJTlQg
bWVudUlEKQogewotICAgIGlmICghZ1dlYlZpZXcpCisgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGludCBoaXN0b3J5RW50cnkgPSBtZW51SUQgLSBJRE1fSElTVE9S
WV9MSU5LMDsKLSAgICBpZiAoaGlzdG9yeUVudHJ5ID4gZ0hpc3RvcnlJdGVtcy5zaXplKCkpCisg
ICAgaWYgKGhpc3RvcnlFbnRyeSA+IG1faGlzdG9yeUl0ZW1zLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSVdlYkhpc3RvcnlJdGVtUHRyIGRlc2lyZWRIaXN0b3J5SXRlbSA9IGdIaXN0
b3J5SXRlbXNbaGlzdG9yeUVudHJ5XTsKKyAgICBJV2ViSGlzdG9yeUl0ZW1QdHIgZGVzaXJlZEhp
c3RvcnlJdGVtID0gbV9oaXN0b3J5SXRlbXNbaGlzdG9yeUVudHJ5XTsKICAgICBpZiAoIWRlc2ly
ZWRIaXN0b3J5SXRlbSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCBzdWNjZWVkZWQgPSBG
QUxTRTsKLSAgICBnV2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShkZXNpcmVkSGlzdG9yeUl0
ZW0sICZzdWNjZWVkZWQpOworICAgIG1fd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShkZXNp
cmVkSGlzdG9yeUl0ZW0sICZzdWNjZWVkZWQpOwogCiAgICAgX2JzdHJfdCBmcmFtZVVSTDsKICAg
ICBkZXNpcmVkSGlzdG9yeUl0ZW0tPlVSTFN0cmluZyhmcmFtZVVSTC5HZXRBZGRyZXNzKCkpOwog
Ci0gICAgOjpTZW5kTWVzc2FnZShoVVJMQmFyV25kLCAoVUlOVClXTV9TRVRURVhULCAwLCAoTFBB
UkFNKWZyYW1lVVJMLkdldEJTVFIoKSk7CisgICAgOjpTZW5kTWVzc2FnZShtX2hVUkxCYXJXbmQs
IChVSU5UKVdNX1NFVFRFWFQsIDAsIChMUEFSQU0pZnJhbWVVUkwuR2V0QlNUUigpKTsKIH0KIAot
c3RhdGljIGNvbnN0IGludCBkcmFnQmFySGVpZ2h0ID0gMzA7Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sg
V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKLXsKLSAgICBXTkRQUk9DIHBhcmVudFByb2MgPSB1c2VzTGF5ZXJlZFdlYlZpZXcoKSA/
IERlZldlYktpdFByb2MgOiBEZWZXaW5kb3dQcm9jOwotCi0gICAgc3dpdGNoIChtZXNzYWdlKSB7
Ci0gICAgY2FzZSBXTV9OQ0hJVFRFU1Q6Ci0gICAgICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXco
KSkgewotICAgICAgICAgICAgUkVDVCB3aW5kb3c7Ci0gICAgICAgICAgICA6OkdldFdpbmRvd1Jl
Y3QoaFduZCwgJndpbmRvdyk7Ci0gICAgICAgICAgICAvLyBGb3IgdGVzdGluZyBvdXIgdHJhbnNw
YXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhhbmRsZSBmb3IKLSAg
ICAgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUg
dG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0J3MKLSAgICAgICAgICAgIC8vIHVuZGVy
IHRoZSBtb3VzZS4gSG93ZXZlciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4g
YXJiaXRyYXJ5Ci0gICAgICAgICAgICAvLyAzMCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhl
IHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxvY2F0aW9uLgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NB
UFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KLSAgICAgICAgICAgIC8vIHRyZWF0IHRo
aXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5vcm1hbCB3aW5kb3cu
Ci0gICAgICAgICAgICBpbnQgeSA9IEhJV09SRChsUGFyYW0pOwotCi0gICAgICAgICAgICBpZiAo
KHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBkcmFnQmFySGVpZ2h0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSFRDQVBUSU9OOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Ci0gICAgY2FzZSBXTV9DT01NQU5EOiB7Ci0gICAgICAgIGludCB3bUlkID0gTE9XT1JEKHdQ
YXJhbSk7Ci0gICAgICAgIGludCB3bUV2ZW50ID0gSElXT1JEKHdQYXJhbSk7Ci0gICAgICAgIGlm
ICh3bUlkID49IElETV9ISVNUT1JZX0xJTkswICYmIHdtSWQgPD0gSURNX0hJU1RPUllfTElOSzkp
IHsKLSAgICAgICAgICAgIE5hdmlnYXRlVG9IaXN0b3J5KGhXbmQsIHdtSWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gUGFyc2UgdGhlIG1lbnUgc2VsZWN0aW9u
czoKLSAgICAgICAgc3dpdGNoICh3bUlkKSB7Ci0gICAgICAgIGNhc2UgSURNX0FCT1VUOgotICAg
ICAgICAgICAgRGlhbG9nQm94KGhJbnN0LCBNQUtFSU5UUkVTT1VSQ0UoSUREX0FCT1VUQk9YKSwg
aFduZCwgQWJvdXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0VYSVQ6
Ci0gICAgICAgICAgICBEZXN0cm95V2luZG93KGhXbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURNX1BSSU5UOgotICAgICAgICAgICAgUHJpbnRWaWV3KGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElE
TV9XRUJfSU5TUEVDVE9SOgotICAgICAgICAgICAgTGF1bmNoSW5zcGVjdG9yKGhXbmQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0hJU1RPUllfQkFDS1dBUkQ6Ci0gICAg
ICAgIGNhc2UgSURNX0hJU1RPUllfRk9SV0FSRDoKLSAgICAgICAgICAgIE5hdmlnYXRlRm9yd2Fy
ZE9yQmFja3dhcmQoaFduZCwgd21JZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRE1fQVZGT1VOREFUSU9OOgotICAgICAgICBjYXNlIElETV9BQ0NfQ09NUE9TSVRJTkc6Ci0g
ICAgICAgIGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46Ci0gICAgICAgIGNhc2UgSURNX0NPTVBPU0lU
SU5HX0JPUkRFUlM6Ci0gICAgICAgIGNhc2UgSURNX0RJU0FCTEVfSU1BR0VTOgotICAgICAgICBj
YXNlIElETV9ESVNBQkxFX1NUWUxFUzoKLSAgICAgICAgY2FzZSBJRE1fRElTQUJMRV9KQVZBU0NS
SVBUOgotICAgICAgICBjYXNlIElETV9ESVNBQkxFX0xPQ0FMX0ZJTEVfUkVTVFJJQ1RJT05TOgot
ICAgICAgICAgICAgVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhw
YXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX0RFU1RST1k6Ci0jaWYgVVNFKENG
KQotICAgICAgICBDRlJ1bkxvb3BTdG9wKENGUnVuTG9vcEdldE1haW4oKSk7Ci0jZW5kaWYKLSAg
ICAgICAgUG9zdFF1aXRNZXNzYWdlKDApOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdNX1NJ
WkU6Ci0gICAgICAgIGlmICghZ1dlYlZpZXcgfHwgdXNlc0xheWVyZWRXZWJWaWV3KCkpCi0gICAg
ICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSk7Ci0KLSAgICAgICAgcmVzaXplU3ViVmlld3MoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFBy
b2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotTFJFU1VMVCBDQUxMQkFDSyBFZGl0UHJvYyhIV05EIGhEbGcsIFVJTlQgbWVzc2Fn
ZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2Up
IHsKLSAgICBjYXNlIFdNX0NIQVI6Ci0gICAgICAgIGlmICh3UGFyYW0gPT0gMTMpIHsgLy8gRW50
ZXIgS2V5Ci0gICAgICAgICAgICB3Y2hhcl90IHN0clB0cltJTlRFUk5FVF9NQVhfVVJMX0xFTkdU
SF07Ci0gICAgICAgICAgICAqKChMUFdPUkQpc3RyUHRyKSA9IElOVEVSTkVUX01BWF9VUkxfTEVO
R1RIOyAKLSAgICAgICAgICAgIGludCBzdHJMZW4gPSBTZW5kTWVzc2FnZShoRGxnLCBFTV9HRVRM
SU5FLCAwLCAoTFBBUkFNKXN0clB0cik7Ci0KLSAgICAgICAgICAgIHN0clB0cltzdHJMZW5dID0g
MDsKLSAgICAgICAgICAgIF9ic3RyX3QgYnN0cihzdHJQdHIpOwotICAgICAgICAgICAgbG9hZFVS
TChic3RyLkdldEJTVFIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhEZWZFZGl0UHJvYywg
aERsZywgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgIH0KLX0KLQotTFJFU1VMVCBDQUxM
QkFDSyBCYWNrQnV0dG9uUHJvYyhIV05EIGhEbGcsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJh
bSwgTFBBUkFNIGxQYXJhbSkKK2Jvb2wgV2luTGF1bmNoZXI6OmdvQmFjaygpCiB7CiAgICAgQk9P
TCB3ZW50QmFjayA9IEZBTFNFOwotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01f
TEJVVFRPTlVQOgotICAgICAgICBnV2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFjayk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKERlZkJ1dHRvblByb2MsIGhEbGcs
IG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLSAgICB9CisgICAgbV93ZWJWaWV3LT5nb0JhY2so
JndlbnRCYWNrKTsKKyAgICByZXR1cm4gd2VudEJhY2s7CiB9CiAKLUxSRVNVTFQgQ0FMTEJBQ0sg
Rm9yd2FyZEJ1dHRvblByb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCitib29sIFdpbkxhdW5jaGVyOjpnb0ZvcndhcmQoKQogewogICAgIEJP
T0wgd2VudEZvcndhcmQgPSBGQUxTRTsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICBjYXNl
IFdNX0xCVVRUT05VUDoKLSAgICAgICAgZ1dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEZvcndhcmQp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhEZWZCdXR0b25Q
cm9jLCBoRGxnLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgfQotfQotCi0vLyBNZXNz
YWdlIGhhbmRsZXIgZm9yIGFib3V0IGJveC4KLUlOVF9QVFIgQ0FMTEJBQ0sgQWJvdXQoSFdORCBo
RGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAg
VU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihsUGFyYW0pOwotICAgIHN3aXRjaCAobWVzc2FnZSkgewot
ICAgIGNhc2UgV01fSU5JVERJQUxPRzoKLSAgICAgICAgcmV0dXJuIChJTlRfUFRSKVRSVUU7Ci0K
LSAgICBjYXNlIFdNX0NPTU1BTkQ6Ci0gICAgICAgIGlmIChMT1dPUkQod1BhcmFtKSA9PSBJRE9L
IHx8IExPV09SRCh3UGFyYW0pID09IElEQ0FOQ0VMKSB7Ci0gICAgICAgICAgICBFbmREaWFsb2co
aERsZywgTE9XT1JEKHdQYXJhbSkpOwotICAgICAgICAgICAgcmV0dXJuIChJTlRfUFRSKVRSVUU7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAoSU5UX1BUUilG
QUxTRTsKKyAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEZvcndhcmQpOworICAgIHJldHVy
biB3ZW50Rm9yd2FyZDsKIH0KIAotc3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHBhc3NlZFVSTCkK
K0hSRVNVTFQgV2luTGF1bmNoZXI6OmxvYWRVUkwoY29uc3QgQlNUUiYgcGFzc2VkVVJMKQogewog
ICAgIF9ic3RyX3QgdXJsQlN0cihwYXNzZWRVUkwpOwogICAgIGlmICghIXVybEJTdHIgJiYgKDo6
UGF0aEZpbGVFeGlzdHModXJsQlN0cikgfHwgOjpQYXRoSXNVTkModXJsQlN0cikpKSB7CiAgICAg
ICAgIFRDSEFSIGZpbGVVUkxbSU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOwotICAgICAgICBEV09S
RCBmaWxlVVJMTGVuZ3RoID0gc2l6ZW9mKGZpbGVVUkwpL3NpemVvZihmaWxlVVJMWzBdKTsKKyAg
ICAgICAgRFdPUkQgZmlsZVVSTExlbmd0aCA9IHNpemVvZihmaWxlVVJMKSAvIHNpemVvZihmaWxl
VVJMWzBdKTsKIAogICAgICAgICBpZiAoU1VDQ0VFREVEKDo6VXJsQ3JlYXRlRnJvbVBhdGgodXJs
QlN0ciwgZmlsZVVSTCwgJmZpbGVVUkxMZW5ndGgsIDApKSkKICAgICAgICAgICAgIHVybEJTdHIg
PSBmaWxlVVJMOwogICAgIH0KIAogICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICBIUkVTVUxU
IGhyID0gZ1dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOworICAg
IEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRy
KCkpOwogICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBocjsKIAogICAgIElXZWJNdXRhYmxlVVJMUmVxdWVzdFB0ciByZXF1ZXN0OwogICAgIGhyID0g
V2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViTXV0YWJsZVVSTFJlcXVlc3QsIDAsIElJRF9J
V2ViTXV0YWJsZVVSTFJlcXVlc3QsICh2b2lkKiopJnJlcXVlc3QpOwogICAgIGlmIChGQUlMRUQo
aHIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBocjsKIAogICAgIGhyID0gcmVx
dWVzdC0+aW5pdFdpdGhVUkwod2Nzc3RyKHN0YXRpY19jYXN0PHdjaGFyX3QqPih1cmxCU3RyKSwg
TCI6Ly8iKSA/IHVybEJTdHIgOiBfYnN0cl90KEwiaHR0cDovLyIpICsgdXJsQlN0ciwgV2ViVVJM
UmVxdWVzdFVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDYwKTsKICAgICBpZiAoRkFJTEVEKGhyKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gaHI7CiAKICAgICBfYnN0cl90IG1ldGhv
ZEJTdHIoTCJHRVQiKTsKICAgICBociA9IHJlcXVlc3QtPnNldEhUVFBNZXRob2QobWV0aG9kQlN0
cik7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IGhyOwogCiAgICAgaHIgPSBmcmFtZS0+bG9hZFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgaWYgKEZB
SUxFRChocikpCi0gICAgICAgIHJldHVybjsKIAotICAgIFNldEZvY3VzKGdWaWV3V2luZG93KTsK
LX0KLQotZXh0ZXJuICJDIiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgaW50IFdJTkFQSSBkbGxMYXVu
Y2hlckVudHJ5UG9pbnQoSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFu
Y2UsIExQV1NUUiBscHN0ckNtZExpbmUsIGludCBuQ21kU2hvdykKLXsKLSAgICByZXR1cm4gd1dp
bk1haW4oaEluc3RhbmNlLCBoUHJldkluc3RhbmNlLCBscHN0ckNtZExpbmUsIG5DbWRTaG93KTsK
KyAgICByZXR1cm4gaHI7CiB9CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHJldmlzaW9u
IDE3MDI5OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAicmVzb3VyY2UuaCIKLSNpbmNs
dWRlIDxXZWJLaXQvV2ViS2l0Lmg+Ci0KLWNsYXNzIFdpbkxhdW5jaGVyV2ViSG9zdCA6IHB1Ymxp
YyBJV2ViRnJhbWVMb2FkRGVsZWdhdGUKLXsKLXB1YmxpYzoKLSAgICBXaW5MYXVuY2hlcldlYkhv
c3QoKSA6IG1fcmVmQ291bnQoMSkge30KLQotICAgIC8vIElVbmtub3duCi0gICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJl
Zih2b2lkKTsKLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9p
ZCk7Ci0KLSAgICAvLyBJV2ViRnJhbWVMb2FkRGVsZWdhdGUKLSAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSggCi0gICAg
ICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdl
YkZyYW1lKiAvKmZyYW1lKi8pIHsgcmV0dXJuIFNfT0s7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3
LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0K
LSAgICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZFdpdGhFcnJvciggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZp
ZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yICplcnJvciwKLSAgICAgICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUqKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgZGlkQ29tbWl0TG9hZEZvckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmll
dyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVy
biB1cGRhdGVBZGRyZXNzQmFyKHdlYlZpZXcpOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVUaXRsZSggCi0gICAgICAgIC8qIFtpbl0gKi8g
SVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gQlNUUiB0aXRsZSwKLSAgICAg
ICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0g
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENoYW5nZUljb25zKAotICAg
ICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElX
ZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KLQotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlSWNvbiggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdl
YlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gT0xFX0hBTkRMRSBoQml0bWFwLAot
ICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KLSAg
ICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmluaXNoTG9hZEZv
ckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyogd2ViVmlldywKLSAgICAgICAg
LyogW2luXSAqLyBJV2ViRnJhbWUqIC8qZnJhbWUqLyk7Ci0gICAgCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxMb2FkV2l0aEVycm9yKCAKLSAgICAgICAgLyog
W2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRXJyb3Ig
KmVycm9yLAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZm9yRnJhbWUpIHsgcmV0dXJu
IFNfT0s7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlk
Q2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElX
ZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsg
cmV0dXJuIFNfT0s7IH0KLQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3
aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkwoIAotICAgICAgICAvKiBbaW5dICovIElXZWJW
aWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIEJTVFIgdXJsLAotICAgICAgICAvKiBb
aW5dICovIGRvdWJsZSBkZWxheVNlY29uZHMsCi0gICAgICAgIC8qIFtpbl0gKi8gREFURSBmaXJl
RGF0ZSwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09L
OyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENhbmNl
bENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3
ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNf
T0s7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbENs
b3NlRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAg
ICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KLSAgICAKLSAg
ICB2aXJ0dWFsIC8qIFtsb2NhbF0gKi8gSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3aW5kb3dT
Y3JpcHRPYmplY3RBdmFpbGFibGUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJW
aWV3LAotICAgICAgICAvKiBbaW5dICovIEpTQ29udGV4dFJlZiBjb250ZXh0LAotICAgICAgICAv
KiBbaW5dICovIEpTT2JqZWN0UmVmIHdpbmRvd1NjcmlwdE9iamVjdCkgIHsgcmV0dXJuIFNfT0s7
IH0KLQotICAgIHZpcnR1YWwgLyogW2xvY2FsXSAqLyBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGRpZENsZWFyV2luZG93T2JqZWN0KCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2Vi
VmlldywKLSAgICAgICAgLyogW2luXSAqLyBKU0NvbnRleHRSZWYgY29udGV4dCwKLSAgICAgICAg
LyogW2luXSAqLyBKU09iamVjdFJlZiB3aW5kb3dTY3JpcHRPYmplY3QsCi0gICAgICAgIC8qIFtp
bl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQotCi0gICAgLy8gV2luTGF1
bmNoZXJXZWJIb3N0Ci0KLXByb3RlY3RlZDoKLSAgICBIUkVTVUxUIHVwZGF0ZUFkZHJlc3NCYXIo
SVdlYlZpZXcqIHdlYlZpZXcpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVUxPTkcgICAgICAgICAgICAg
ICAgICAgbV9yZWZDb3VudDsKLX07CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hl
clJlcGxhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlclJl
cGxhY2UuaAkocmV2aXNpb24gMTcwMjk5KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNo
ZXJSZXBsYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDEzIEBACiAgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCisjaWZuZGVmIFdpbkxhdW5jaGVyUmVwbGFjZV9oCisjZGVmaW5lIFdpbkxhdW5jaGVyUmVw
bGFjZV9oCisKIC8vIFRoaXMgZmlsZSBpcyB0byBtYWtlIGl0IGVhc2llciBmb3IgdXNlcnMgdG8g
bWFuYWdlIGNoYW5nZXMgdG8gdGhlIGludGVybmFscyBvZiBXaW5MYXVuY2hlcgogCi1jb25zdCB3
Y2hhcl90KiBkZWZhdWx0SFRNTCA9IEwiPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMDBG
RjAwXCI+VGVzdGluZzwvcD48aW1nIGlkPVwid2Via2l0IGxvZ29cIiBzcmM9XCJodHRwOi8vd2Vi
a2l0Lm9yZy9pbWFnZXMvaWNvbi1nb2xkLnBuZ1wiIGFsdD1cIkZhY2VcIj48ZGl2IHN0eWxlPVwi
Ym9yZGVyOiBzb2xpZCBibHVlOyBiYWNrZ3JvdW5kOiB3aGl0ZTtcIiBjb250ZW50ZWRpdGFibGU9
XCJ0cnVlXCI+ZGl2IHdpdGggYmx1ZSBib3JkZXI8L2Rpdj48dWw+PGxpPmZvbzxsaT5iYXI8bGk+
YmF6PC91bD4iOworc3RhdGljIGNvbnN0IHdjaGFyX3QqIGRlZmF1bHRIVE1MID0gTCI8cCBzdHls
ZT1cImJhY2tncm91bmQtY29sb3I6ICMwMEZGMDBcIj5UZXN0aW5nPC9wPjxpbWcgaWQ9XCJ3ZWJr
aXQgbG9nb1wiIHNyYz1cImh0dHA6Ly93ZWJraXQub3JnL2ltYWdlcy9pY29uLWdvbGQucG5nXCIg
YWx0PVwiRmFjZVwiPjxkaXYgc3R5bGU9XCJib3JkZXI6IHNvbGlkIGJsdWU7IGJhY2tncm91bmQ6
IHdoaXRlO1wiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIj5kaXYgd2l0aCBibHVlIGJvcmRlcjwv
ZGl2Pjx1bD48bGk+Zm9vPGxpPmJhcjxsaT5iYXo8L3VsPiI7CisKK3N0YXRpYyB2b2lkIHByb2Nl
c3NDcmFzaFJlcG9ydChjb25zdCB3Y2hhcl90KiBmaWxlTmFtZSkgeyA6Ok1lc3NhZ2VCb3goMCwg
ZmlsZU5hbWUsIEwiQ3Jhc2ggUmVwb3J0IiwgTUJfT0spOyB9CiAKLXZvaWQgcHJvY2Vzc0NyYXNo
UmVwb3J0KGNvbnN0IHdjaGFyX3QqIGZpbGVOYW1lKSB7IDo6TWVzc2FnZUJveCgwLCBmaWxlTmFt
ZSwgTCJDcmFzaCBSZXBvcnQiLCBNQl9PSyk7IH0KKyNlbmRpZgpJbmRleDogVG9vbHMvV2luTGF1
bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVu
Y2hlci9XaW5MYXVuY2hlcldlYkhvc3QuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvV2luTGF1
bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1
bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAic3RkYWZ4
LmgiCisjaW5jbHVkZSAiV2luTGF1bmNoZXJXZWJIb3N0LmgiCisKKyNpbmNsdWRlICJET01EZWZh
dWx0SW1wbC5oIgorI2luY2x1ZGUgIldpbkxhdW5jaGVyLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dl
YktpdC5oPgorCitjbGFzcyBTaW1wbGVFdmVudExpc3RlbmVyIDogcHVibGljIERPTUV2ZW50TGlz
dGVuZXIgeworcHVibGljOgorICAgIFNpbXBsZUV2ZW50TGlzdGVuZXIoTFBXU1RSIHR5cGUpCisg
ICAgeworICAgICAgICB3Y3NuY3B5X3MobV9ldmVudFR5cGUsIDEwMCwgdHlwZSwgMTAwKTsKKyAg
ICAgICAgbV9ldmVudFR5cGVbOTldID0gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgaGFuZGxlRXZlbnQoSURPTUV2ZW50KiBldnQpCisgICAgeworICAg
ICAgICB3Y2hhcl90IG1lc3NhZ2VbMjU1XTsKKyAgICAgICAgd2NzY3B5X3MobWVzc2FnZSwgMjU1
LCBtX2V2ZW50VHlwZSk7CisgICAgICAgIHdjc2NhdF9zKG1lc3NhZ2UsIDI1NSwgTCIgZXZlbnQg
ZmlyZWQhIik7CisgICAgICAgIDo6TWVzc2FnZUJveCgwLCBtZXNzYWdlLCBMIkV2ZW50IEhhbmRs
ZXIiLCBNQl9PSyk7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB3Y2hhcl90IG1fZXZlbnRUeXBlWzEwMF07Cit9OworCit0eXBlZGVmIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElXZWJGcmFtZSwgJl9fdXVpZG9mKElXZWJGcmFtZSk+PiBJV2ViRnJhbWVQdHI7Cit0
eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJEYXRhU291cmNlLCAmX191dWlkb2YoSVdl
YkRhdGFTb3VyY2UpPj4gSVdlYkRhdGFTb3VyY2VQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVx
dWVzdCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7CisKK0hSRVNVTFQgV2luTGF1bmNoZXJX
ZWJIb3N0Ojp1cGRhdGVBZGRyZXNzQmFyKElXZWJWaWV3JiB3ZWJWaWV3KQoreworICAgIElXZWJG
cmFtZVB0ciBtYWluRnJhbWU7CisgICAgSFJFU1VMVCBociA9IHdlYlZpZXcubWFpbkZyYW1lKCZt
YWluRnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIElXZWJEYXRhU291cmNlUHRyIGRhdGFTb3VyY2U7CisgICAgaHIg
PSBtYWluRnJhbWUtPmRhdGFTb3VyY2UoJmRhdGFTb3VyY2UuR2V0SW50ZXJmYWNlUHRyKCkpOwor
ICAgIGlmIChGQUlMRUQoaHIpIHx8ICFkYXRhU291cmNlKQorICAgICAgICBociA9IG1haW5GcmFt
ZS0+cHJvdmlzaW9uYWxEYXRhU291cmNlKCZkYXRhU291cmNlLkdldEludGVyZmFjZVB0cigpKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSB8fCAhZGF0YVNvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHIgcmVxdWVzdDsKKyAgICBociA9IGRhdGFTb3Vy
Y2UtPnJlcXVlc3QoJnJlcXVlc3QuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQo
aHIpIHx8ICFyZXF1ZXN0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIF9ic3RyX3QgZnJhbWVV
Ukw7CisgICAgaHIgPSByZXF1ZXN0LT5tYWluRG9jdW1lbnRVUkwoZnJhbWVVUkwuR2V0QWRkcmVz
cygpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICA6OlNl
bmRNZXNzYWdlKG1faFVSTEJhclduZCwgc3RhdGljX2Nhc3Q8VUlOVD4oV01fU0VUVEVYVCksIDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8TFBBUkFNPihmcmFtZVVSTC5HZXRCU1RSKCkpKTsKKworICAgIHJl
dHVybiAwOworfQorCitIUkVTVUxUIFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElXZWJFcnJvciAqZXJyb3IsIElXZWJGcmFtZSop
Cit7CisgICAgX2JzdHJfdCBlcnJvckRlc2NyaXB0aW9uOworICAgIEhSRVNVTFQgaHIgPSBlcnJv
ci0+bG9jYWxpemVkRGVzY3JpcHRpb24oZXJyb3JEZXNjcmlwdGlvbi5HZXRBZGRyZXNzKCkpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gTCJGYWlsZWQg
dG8gbG9hZCBwYWdlIGFuZCB0byBsb2NhbGl6ZSBlcnJvciBkZXNjcmlwdGlvbi4iOworCisgICAg
aWYgKF93Y3NpY21wKGVycm9yRGVzY3JpcHRpb24sIEwiQ2FuY2VsbGVkIikpCisgICAgICAgIDo6
TWVzc2FnZUJveFcoMCwgc3RhdGljX2Nhc3Q8TFBDV1NUUj4oZXJyb3JEZXNjcmlwdGlvbiksIEwi
RXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisKKyAgICByZXR1cm4gU19PSzsKK30KKwor
SFJFU1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2
b2lkKiogcHB2T2JqZWN0KQoreworICAgICpwcHZPYmplY3QgPSAwOworICAgIGlmIChJc0VxdWFs
R1VJRChyaWlkLCBJSURfSVVua25vd24pKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SVdlYkZyYW1lTG9hZERlbGVnYXRlKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdV
SUQocmlpZCwgSUlEX0lXZWJGcmFtZUxvYWREZWxlZ2F0ZSkpCisgICAgICAgICpwcHZPYmplY3Qg
PSBzdGF0aWNfY2FzdDxJV2ViRnJhbWVMb2FkRGVsZWdhdGUqPih0aGlzKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworCisgICAgQWRkUmVmKCk7CisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK1VMT05HIFdpbkxhdW5jaGVyV2ViSG9zdDo6QWRkUmVmKCkKK3sKKyAgICBy
ZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBXaW5MYXVuY2hlcldlYkhvc3Q6OlJlbGVh
c2UoKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKKyAgICBpZiAoIW5ld1Jl
ZikKKyAgICAgICAgZGVsZXRlKHRoaXMpOworCisgICAgcmV0dXJuIG5ld1JlZjsKK30KKwordHlw
ZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJRE9NRG9jdW1lbnQsICZfX3V1aWRvZihJRE9NRG9j
dW1lbnQpPj4gSURPTURvY3VtZW50UHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJ
RE9NRWxlbWVudCwgJl9fdXVpZG9mKElET01FbGVtZW50KT4+IElET01FbGVtZW50UHRyOwordHlw
ZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJRE9NRXZlbnRUYXJnZXQsICZfX3V1aWRvZihJRE9N
RXZlbnRUYXJnZXQpPj4gSURPTUV2ZW50VGFyZ2V0UHRyOworCitIUkVTVUxUIFdpbkxhdW5jaGVy
V2ViSG9zdDo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKElXZWJWaWV3KiB3ZWJWaWV3LCBJV2ViRnJh
bWUqIGZyYW1lKQoreworICAgIElET01Eb2N1bWVudFB0ciBkb2M7CisgICAgZnJhbWUtPkRPTURv
Y3VtZW50KCZkb2MuR2V0SW50ZXJmYWNlUHRyKCkpOworCisgICAgSURPTUVsZW1lbnRQdHIgZWxl
bWVudDsKKyAgICBJRE9NRXZlbnRUYXJnZXRQdHIgdGFyZ2V0OworCisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+c2hvd0xhc3RWaXNpdGVkU2l0ZXMoKndlYlZpZXcpOworCisg
ICAgLy8gVGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIHRlc3QgcGFnZToKKyAgICBIUkVTVUxUIGhy
ID0gZG9jLT5nZXRFbGVtZW50QnlJZChMIndlYmtpdCBsb2dvIiwgJmVsZW1lbnQuR2V0SW50ZXJm
YWNlUHRyKCkpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgaHIgPSBlbGVtZW50LT5RdWVyeUludGVyZmFjZShJSURfSURPTUV2ZW50VGFyZ2V0LCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnRhcmdldC5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSB0YXJn
ZXQtPmFkZEV2ZW50TGlzdGVuZXIoTCJjbGljayIsIG5ldyBTaW1wbGVFdmVudExpc3RlbmVyIChM
IndlYmtpdCBsb2dvIGNsaWNrIiksIEZBTFNFKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybiBocjsKKworICAgIHJldHVybiBocjsKK30KSW5kZXg6IFRvb2xzL1dpbkxh
dW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5j
aGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCShyZXZpc2lvbiAxNzAyOTkpCShmcm9tIFRvb2xzL1dp
bkxhdW5jaGVyL1dpbkxhdW5jaGVyLmg6MTcwMjk5KQorKysgVG9vbHMvV2luTGF1bmNoZXIvV2lu
TGF1bmNoZXJXZWJIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAicmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisKK2Ns
YXNzIFdpbkxhdW5jaGVyV2ViSG9zdCA6IHB1YmxpYyBJV2ViRnJhbWVMb2FkRGVsZWdhdGUKK3sK
K3B1YmxpYzoKKyAgICBXaW5MYXVuY2hlcldlYkhvc3QoKSA6IG1fcmVmQ291bnQoMSkge30KKwor
ICAgIC8vIElVbmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1
ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFs
IFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsKKyAgICB2aXJ0dWFsIFVMT05H
IFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAvLyBJV2ViRnJhbWVMb2Fk
RGVsZWdhdGUKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZSggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdl
YlZpZXcsCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAvKmZyYW1lKi8pIHsgcmV0dXJu
IFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoIAorICAgICAg
ICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIElXZWJG
cmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvciggCisgICAg
ICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCisgICAgICAgIC8qIFtpbl0gKi8gSVdl
YkVycm9yICplcnJvciwKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUqKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ29tbWl0TG9hZEZvckZyYW1l
KCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKKyAgICAgICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiB1cGRhdGVBZGRyZXNzQmFyKHdlYlZpZXcp
OyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2Vp
dmVUaXRsZSggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCisgICAgICAg
IC8qIFtpbl0gKi8gQlNUUiB0aXRsZSwKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZy
YW1lKSB7IHJldHVybiBTX09LOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIGRpZENoYW5nZUljb25zKAorICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3
ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNf
T0s7IH0KKworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZl
SWNvbiggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCisgICAgICAgIC8q
IFtpbl0gKi8gT0xFX0hBTkRMRSBoQml0bWFwLAorICAgICAgICAvKiBbaW5dICovIElXZWJGcmFt
ZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgZGlkRmluaXNoTG9hZEZvckZyYW1lKCAKKyAgICAgICAgLyogW2luXSAq
LyBJV2ViVmlldyogd2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUqIC8qZnJh
bWUqLyk7CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZh
aWxMb2FkV2l0aEVycm9yKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywK
KyAgICAgICAgLyogW2luXSAqLyBJV2ViRXJyb3IgKmVycm9yLAorICAgICAgICAvKiBbaW5dICov
IElXZWJGcmFtZSAqZm9yRnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9y
RnJhbWUoIAorICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAv
KiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9V
UkwoIAorICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBb
aW5dICovIEJTVFIgdXJsLAorICAgICAgICAvKiBbaW5dICovIGRvdWJsZSBkZWxheVNlY29uZHMs
CisgICAgICAgIC8qIFtpbl0gKi8gREFURSBmaXJlRGF0ZSwKKyAgICAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoIAor
ICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICov
IElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbENsb3NlRnJhbWUoIAorICAgICAgICAvKiBbaW5d
ICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJh
bWUpIHsgcmV0dXJuIFNfT0s7IH0KKyAgICAKKyAgICB2aXJ0dWFsIC8qIFtsb2NhbF0gKi8gSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoIAorICAg
ICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIEpT
Q29udGV4dFJlZiBjb250ZXh0LAorICAgICAgICAvKiBbaW5dICovIEpTT2JqZWN0UmVmIHdpbmRv
d1NjcmlwdE9iamVjdCkgIHsgcmV0dXJuIFNfT0s7IH0KKworICAgIHZpcnR1YWwgLyogW2xvY2Fs
XSAqLyBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENsZWFyV2luZG93T2JqZWN0KCAKKyAg
ICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBK
U0NvbnRleHRSZWYgY29udGV4dCwKKyAgICAgICAgLyogW2luXSAqLyBKU09iamVjdFJlZiB3aW5k
b3dTY3JpcHRPYmplY3QsCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyBy
ZXR1cm4gU19PSzsgfQorCisgICAgLy8gV2luTGF1bmNoZXJXZWJIb3N0CisKK3Byb3RlY3RlZDoK
KyAgICBIUkVTVUxUIHVwZGF0ZUFkZHJlc3NCYXIoSVdlYlZpZXcqIHdlYlZpZXcpOworCitwcm90
ZWN0ZWQ6CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgbV9yZWZDb3VudDsKK307CkluZGV4
OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAkod29ya2luZyBjb3B5KQorKysg
VG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMTQgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjgsOTIgKzI4LDQ4IEBACiAjaW5jbHVkZSAicmVzb3VyY2UuaCIKICNpbmNsdWRlIDxXZWJLaXQv
V2ViS2l0Lmg+CiAKK2NsYXNzIFdpbkxhdW5jaGVyOworCiBjbGFzcyBXaW5MYXVuY2hlcldlYkhv
c3QgOiBwdWJsaWMgSVdlYkZyYW1lTG9hZERlbGVnYXRlCiB7CiBwdWJsaWM6Ci0gICAgV2luTGF1
bmNoZXJXZWJIb3N0KCkgOiBtX3JlZkNvdW50KDEpIHt9CisgICAgV2luTGF1bmNoZXJXZWJIb3N0
KFdpbkxhdW5jaGVyKiBjbGllbnQsIEhXTkQgdXJsQmFyKQorICAgICAgICA6IG1fcmVmQ291bnQo
MSksIG1fY2xpZW50KGNsaWVudCksIG1faFVSTEJhclduZCh1cmxCYXIpIHsgfQogCiAgICAgLy8g
SVVua25vd24KICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRl
cmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxPTkcg
U1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVU
SE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENB
TExUWVBFIEFkZFJlZigpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVs
ZWFzZSgpOwogCiAgICAgLy8gSVdlYkZyYW1lTG9hZERlbGVnYXRlCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoIAot
ICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICov
IElXZWJGcmFtZSogLypmcmFtZSovKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2Vi
VmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09L
OyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxQ
cm92aXNpb25hbExvYWRXaXRoRXJyb3IoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3
ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJFcnJvciAqZXJyb3IsCi0gICAgICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lKik7Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIGRpZENvbW1pdExvYWRGb3JGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdl
YlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyBy
ZXR1cm4gdXBkYXRlQWRkcmVzc0Jhcih3ZWJWaWV3KTsgfQotICAgIAotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlVGl0bGUoIAotICAgICAgICAvKiBbaW5d
ICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUsCi0g
ICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQotICAg
IAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDaGFuZ2VJY29ucygK
LSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAq
LyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUljb24oIAotICAgICAgICAvKiBbaW5dICov
IElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgaEJpdG1h
cCwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9
Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExv
YWRGb3JGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAg
ICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAvKmZyYW1lKi8pOwotICAgIAotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWlsTG9hZFdpdGhFcnJvciggCi0gICAgICAg
IC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkVy
cm9yICplcnJvciwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZvckZyYW1lKSB7IHJl
dHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAq
LyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1l
KSB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMKCAKLSAgICAgICAgLyogW2luXSAqLyBJ
V2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBCU1RSIHVybCwKLSAgICAgICAg
LyogW2luXSAqLyBkb3VibGUgZGVsYXlTZWNvbmRzLAotICAgICAgICAvKiBbaW5dICovIERBVEUg
ZmlyZURhdGUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4g
U19PSzsgfQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRD
YW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmll
dyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVy
biBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdp
bGxDbG9zZUZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAg
ICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAg
Ci0gICAgdmlydHVhbCAvKiBbbG9jYWxdICovIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lu
ZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAq
d2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBKU0NvbnRleHRSZWYgY29udGV4dCwKLSAgICAg
ICAgLyogW2luXSAqLyBKU09iamVjdFJlZiB3aW5kb3dTY3JpcHRPYmplY3QpICB7IHJldHVybiBT
X09LOyB9Ci0KLSAgICB2aXJ0dWFsIC8qIFtsb2NhbF0gKi8gSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkaWRDbGVhcldpbmRvd09iamVjdCggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcg
KndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSlNDb250ZXh0UmVmIGNvbnRleHQsCi0gICAg
ICAgIC8qIFtpbl0gKi8gSlNPYmplY3RSZWYgd2luZG93U2NyaXB0T2JqZWN0LAotICAgICAgICAv
KiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KLQotICAgIC8vIFdp
bkxhdW5jaGVyV2ViSG9zdAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKElXZWJWaWV3KiwgSVdlYkZyYW1lKikgeyBy
ZXR1cm4gU19PSzsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShJV2ViVmlldyos
IElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElX
ZWJFcnJvciosIElXZWJGcmFtZSopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkaWRDb21taXRMb2FkRm9yRnJhbWUoSVdlYlZpZXcqIHdlYlZpZXcsIElXZWJGcmFtZSop
CisgICAgeworICAgICAgICBpZiAoIXdlYlZpZXcpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOworCisgICAgICAgIHJldHVybiB1cGRhdGVBZGRyZXNzQmFyKCp3ZWJWaWV3KTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVU
aXRsZShJV2ViVmlldyosIEJTVFIgdGl0bGUsIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0K
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2hhbmdlSWNvbnMoSVdl
YlZpZXcqLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVJY29uKElXZWJWaWV3KiwgT0xFX0hBTkRMRSBo
Qml0bWFwLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRGb3JGcmFtZShJV2ViVmlldyosIElXZWJG
cmFtZSopOyAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWls
TG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElXZWJFcnJvciosIElXZWJGcmFtZSopIHsgcmV0dXJu
IFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2hhbmdl
TG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUoSVdlYlZpZXcqLCBJV2ViRnJhbWUqKSB7IHJldHVy
biBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxQZXJm
b3JtQ2xpZW50UmVkaXJlY3RUb1VSTChJV2ViVmlldyosIEJTVFIgdXJsLCBkb3VibGUgZGVsYXlT
ZWNvbmRzLCBEQVRFIGZpcmVEYXRlLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENhbmNlbENsaWVudFJlZGlyZWN0
Rm9yRnJhbWUoSVdlYlZpZXcqLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxDbG9zZUZyYW1lKElXZWJWaWV3Kiwg
SVdlYkZyYW1lKikgeyByZXR1cm4gU19PSzsgfQorICAgIHZpcnR1YWwgLyogW2xvY2FsXSAqLyBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZShJV2Vi
VmlldyosIEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYpICB7IHJldHVybiBTX09LOyB9CisgICAg
dmlydHVhbCAvKiBbbG9jYWxdICovIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2xlYXJX
aW5kb3dPYmplY3QoSVdlYlZpZXcqLCBKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmLCBJV2ViRnJh
bWUqKSB7IHJldHVybiBTX09LOyB9CiAKIHByb3RlY3RlZDoKLSAgICBIUkVTVUxUIHVwZGF0ZUFk
ZHJlc3NCYXIoSVdlYlZpZXcqIHdlYlZpZXcpOworICAgIEhSRVNVTFQgdXBkYXRlQWRkcmVzc0Jh
cihJV2ViVmlldyYpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAg
bV9yZWZDb3VudDsKK3ByaXZhdGU6CisgICAgSFdORCBtX2hVUkxCYXJXbmQ7CisgICAgVUxPTkcg
bV9yZWZDb3VudDsKKyAgICBXaW5MYXVuY2hlciogbV9jbGllbnQ7CiB9OwpJbmRleDogVG9vbHMv
V2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIv
V2luTWFpbi5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5NYWluLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hy
aXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiQ29tbW9u
LmNwcCIKKyNpbmNsdWRlICJXaW5MYXVuY2hlckxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAiV2lu
TGF1bmNoZXJXZWJIb3N0LmgiCisKK2ludCBXSU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5T
VEFOQ0UsIFBXU1RSLCBpbnQgbkNtZFNob3cpCit7CisjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MK
KyAgICBfQ3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwor
ICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOworI2Vu
ZGlmCisKKyAgICBNU0cgbXNnID0gezB9OworICAgIEhBQ0NFTCBoQWNjZWxUYWJsZTsKKworICAg
IElOSVRDT01NT05DT05UUk9MU0VYIEluaXRDdHJsRXg7CisKKyAgICBJbml0Q3RybEV4LmR3U2l6
ZSA9IHNpemVvZihJTklUQ09NTU9OQ09OVFJPTFNFWCk7CisgICAgSW5pdEN0cmxFeC5kd0lDQyAg
PSAweDAwMDA0MDAwOyAvLyBJQ0NfU1RBTkRBUkRfQ0xBU1NFUzsKKyAgICBJbml0Q29tbW9uQ29u
dHJvbHNFeCgmSW5pdEN0cmxFeCk7CisKKyAgICBib29sIHVzZXNMYXllcmVkV2ViVmlldyA9IGZh
bHNlOworICAgIGJvb2wgdXNlRnVsbERlc2t0b3AgPSBmYWxzZTsKKworICAgIF9ic3RyX3QgcmVx
dWVzdGVkVVJMOworICAgIGludCBhcmdjID0gMDsKKyAgICBXQ0hBUioqIGFyZ3YgPSBDb21tYW5k
TGluZVRvQXJndlcoR2V0Q29tbWFuZExpbmVXKCksICZhcmdjKTsKKyAgICBmb3IgKGludCBpID0g
MTsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXRy
YW5zcGFyZW50IikpCisgICAgICAgICAgICB1c2VzTGF5ZXJlZFdlYlZpZXcgPSB0cnVlOworICAg
ICAgICBlbHNlIGlmICghd2NzaWNtcChhcmd2W2ldLCBMIi0tZGVza3RvcCIpKQorICAgICAgICAg
ICAgdXNlRnVsbERlc2t0b3AgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghcmVxdWVzdGVkVVJM
KQorICAgICAgICAgICAgcmVxdWVzdGVkVVJMID0gYXJndltpXTsKKyAgICB9CisKKyAgICAvLyBJ
bml0aWFsaXplIGdsb2JhbCBzdHJpbmdzCisgICAgTG9hZFN0cmluZyhoSW5zdCwgSURTX0FQUF9U
SVRMRSwgc3pUaXRsZSwgTUFYX0xPQURTVFJJTkcpOworICAgIExvYWRTdHJpbmcoaEluc3QsIElE
Q19XSU5MQVVOQ0hFUiwgc3pXaW5kb3dDbGFzcywgTUFYX0xPQURTVFJJTkcpOworICAgIE15UmVn
aXN0ZXJDbGFzcyhoSW5zdCk7CisKKyAgICBpZiAodXNlRnVsbERlc2t0b3ApCisgICAgICAgIGNv
bXB1dGVGdWxsRGVza3RvcEZyYW1lKCk7CisKKyAgICAvLyBJbml0IENPTQorICAgIE9sZUluaXRp
YWxpemUobnVsbHB0cik7CisKKyAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KSB7CisgICAgICAg
IGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgTCJUeXBlIFVSTCBIZXJlIiwKKyAg
ICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5ET1cgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwg
RVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAKKyAgICAgICAgICAgIHNfd2luZG93UG9zaXRpb24u
eCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5LCBzX3dpbmRvd1NpemUuY3gs
IFVSTEJBUl9IRUlHSFQsCisgICAgICAgICAgICAwLCAwLCBoSW5zdCwgMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaE1haW5XbmQgPSBDcmVhdGVXaW5kb3coc3pXaW5kb3dDbGFzcywgc3pUaXRs
ZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAgICAgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENX
X1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0LCAwKTsKKworICAgICAgICBpZiAoIWhNYWluV25k
KQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIGhCYWNrQnV0dG9uV25kID0g
Q3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJT
X1RFWFQsIDAsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhGb3J3
YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBX
U19WSVNJQkxFICB8IEJTX1RFWFQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWlu
V25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJF
RElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVT
X0FVVE9WU0NST0xMLCBDT05UUk9MQlVUVE9OX1dJRFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQs
IDAsIGhJbnN0LCAwKTsKKworICAgICAgICBTaG93V2luZG93KGhNYWluV25kLCBuQ21kU2hvdyk7
CisgICAgICAgIFVwZGF0ZVdpbmRvdyhoTWFpblduZCk7CisgICAgfQorCisgICAgRGVmRWRpdFBy
b2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQdHIoaFVSTEJhcldu
ZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVmQnV0dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DKSk7
CisgICAgU2V0V2luZG93TG9uZ1B0cihoVVJMQmFyV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJw
cmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9jKSk7CisgICAgU2V0V2luZG93TG9uZ1B0cihoQmFj
a0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNr
QnV0dG9uUHJvYykpOworICAgIFNldFdpbmRvd0xvbmdQdHIoaEZvcndhcmRCdXR0b25XbmQsIEdX
TFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oRm9yd2FyZEJ1dHRvblByb2Mp
KTsKKworICAgIFNldEZvY3VzKGhVUkxCYXJXbmQpOworCisgICAgUkVDVCBjbGllbnRSZWN0ID0g
eyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlv
bi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUu
Y3kgfTsKKworICAgIGdXaW5MYXVuY2hlciA9IG5ldyBXaW5MYXVuY2hlcihoTWFpblduZCwgaFVS
TEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3KTsKKyAgICBpZiAoIWdXaW5MYXVuY2hlcikKKyAg
ICAgICAgZ290byBleGl0OworCisgICAgaWYgKCFnV2luTGF1bmNoZXItPnNlZWRJbml0aWFsRGVm
YXVsdFByZWZlcmVuY2VzKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmICghZ1dpbkxh
dW5jaGVyLT5zZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpKQorICAgICAgICBnb3RvIGV4aXQ7CisK
KyAgICBIUkVTVUxUIGhyID0gZ1dpbkxhdW5jaGVyLT5pbml0KCk7CisgICAgaWYgKEZBSUxFRCho
cikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGlmICghc2V0Q2FjaGVGb2xkZXIoKSkKKyAg
ICAgICAgZ290byBleGl0OworCisgICAgaHIgPSBnV2luTGF1bmNoZXItPnNldEZyYW1lTG9hZERl
bGVnYXRlKG5ldyBXaW5MYXVuY2hlcldlYkhvc3QoZ1dpbkxhdW5jaGVyLCBoVVJMQmFyV25kKSk7
CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIGhyID0gZ1dp
bkxhdW5jaGVyLT5zZXRVSURlbGVnYXRlKG5ldyBQcmludFdlYlVJRGVsZWdhdGUoKSk7CisgICAg
aWYgKEZBSUxFRCAoaHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBociA9IGdXaW5MYXVu
Y2hlci0+c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKG5ldyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGUo
KSk7CisgICAgaWYgKEZBSUxFRCAoaHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBociA9
IGdXaW5MYXVuY2hlci0+cHJlcGFyZVZpZXdzKGhNYWluV25kLCBjbGllbnRSZWN0LCByZXF1ZXN0
ZWRVUkwuR2V0QlNUUigpLCBnVmlld1dpbmRvdyk7CisgICAgaWYgKEZBSUxFRChocikgfHwgIWdW
aWV3V2luZG93KQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBpZiAoZ1dpbkxhdW5jaGVyLT51
c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAgICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7
CisKKyAgICByZXNpemVTdWJWaWV3cygpOworCisgICAgU2hvd1dpbmRvdyhnVmlld1dpbmRvdywg
bkNtZFNob3cpOworICAgIFVwZGF0ZVdpbmRvdyhnVmlld1dpbmRvdyk7CisKKyAgICBoQWNjZWxU
YWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRENfV0lOTEFV
TkNIRVIpKTsKKworICAgIGlmIChyZXF1ZXN0ZWRVUkwubGVuZ3RoKCkpCisgICAgICAgIGxvYWRV
UkwocmVxdWVzdGVkVVJMLkdldEJTVFIoKSk7CisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1
MDkpCisKKyAgICAvLyBNYWluIG1lc3NhZ2UgbG9vcDoKKyAgICBfX3RyeSB7CisgICAgICAgIHdo
aWxlIChHZXRNZXNzYWdlKCZtc2csIDAsIDAsIDApKSB7CisjaWYgVVNFKENGKQorICAgICAgICAg
ICAgQ0ZSdW5Mb29wUnVuSW5Nb2RlKGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwgMCwgdHJ1ZSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGlmICghVHJhbnNsYXRlQWNjZWxlcmF0b3IobXNnLmh3bmQsIGhB
Y2NlbFRhYmxlLCAmbXNnKSkgeworICAgICAgICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoJm1z
Zyk7CisgICAgICAgICAgICAgICAgRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworICAgICAgICAgICAg
fQorI2lmIFVTRShHTElCKQorICAgICAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAs
IGZhbHNlKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfSBfX2V4Y2VwdChjcmVhdGVDcmFzaFJl
cG9ydChHZXRFeGNlcHRpb25JbmZvcm1hdGlvbigpKSwgRVhDRVBUSU9OX0VYRUNVVEVfSEFORExF
UikgeyB9CisKK2V4aXQ6CisgICAgc2h1dERvd25XZWJLaXQoKTsKKyNpZmRlZiBfQ1JUREJHX01B
UF9BTExPQworICAgIF9DcnREdW1wTWVtb3J5TGVha3MoKTsKKyNlbmRpZgorCisgICAgLy8gU2h1
dCBkb3duIENPTS4KKyAgICBPbGVVbmluaXRpYWxpemUoKTsKKworICAgIGRlbGV0ZSBnV2luTGF1
bmNoZXI7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obXNnLndQYXJhbSk7Cit9
CisKK0FUT00gTXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpCit7CisgICAgV05E
Q0xBU1NFWCB3Y2V4OworCisgICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisK
KyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CisgICAg
d2NleC5scGZuV25kUHJvYyAgICA9IFduZFByb2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9
IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAg
ICA9IGhJbnN0YW5jZTsKKyAgICB3Y2V4LmhJY29uICAgICAgICAgID0gTG9hZEljb24oaEluc3Rh
bmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1dJTkxBVU5DSEVSKSk7CisgICAgd2NleC5oQ3Vyc29y
ICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURDX0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91
bmQgID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19X
SU5MQVVOQ0hFUik7CisgICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IHN6V2luZG93Q2xhc3M7Cisg
ICAgd2NleC5oSWNvblNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5U
UkVTT1VSQ0UoSURJX1NNQUxMKSk7CisKKyAgICByZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4
KTsKK30KSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1
bmNoZXJMaWIudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVu
Y2hlci52Y3hwcm9qL1dpbkxhdW5jaGVyTGliLnZjeHByb2oJKHJldmlzaW9uIDE3MDI5OSkKKysr
IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMywxNSBAQAogICA8L0l0ZW1Hcm91cD4K
ICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxDb21tb24uY3BwIj4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXERPTURlZmF1
bHRJbXBsLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFByaW50V2ViVUlEZWxl
Z2F0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxzdGRhZnguY3BwIj4KICAg
ICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5DcmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPgpAQCAt
MjE5LDYgKzIyOCw4IEBACiAgICAgICA8UHJlY29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj5DcmVhdGU8L1By
ZWNvbXBpbGVkSGVhZGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cV2luTGF1bmNoZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cV2lu
TGF1bmNoZXJXZWJIb3N0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFdpbk1h
aW4uY3BwIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIiAvPgpAQCAtMjI3LDYgKzIzOCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxzdGRhZnguaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXFdpbkxhdW5jaGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxXaW5MYXVuY2hlclJlcGxhY2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XFdpbkxhdW5jaGVyV2ViSG9zdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iV2luTGF1
bmNoZXJMaWJSZXNvdXJjZS5oIiAvPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KSW5k
ZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIu
dmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5j
aGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNzAy
OTkpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci52Y3hwcm9qL1dpbkxhdW5jaGVy
TGliLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTggQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5jcHAiPgogICAg
ICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFdpbkxhdW5jaGVyV2ViSG9zdC5jcHAiPgorICAgICAgPEZp
bHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXERPTURlZmF1bHRJbXBsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJj
ZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cV2luTWFpbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXENvbW1vbi5jcHAi
PgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4K
ICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxET01EZWZhdWx0SW1wbC5oIj4KQEAgLTYwLDYgKzcyLDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXFdpbkxhdW5jaGVyUmVwbGFjZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZp
bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxXaW5MYXVuY2hlcldlYkhvc3QuaCI+CisgICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAg
ICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9IldpbkxhdW5jaGVyTGliLnJjIj4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233659</attachid>
            <date>2014-06-23 17:21:35 -0700</date>
            <delta_ts>2014-06-23 17:30:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134209-20140623172133.patch</filename>
            <type>text/plain</type>
            <size>107523</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3MDMzNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1NCBAQAorMjAxNC0wNi0yMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBbV2luXSBDbGVhbiB1cCBhbmQgcmVmYWN0b3IgV2luTGF1bmNoZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDIwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgV2luTGF1
bmNoZXIgYSBjbGFzcywgYW5kIG1vdmUgYWxsIG5vbi1jbGFzcyBkcml2ZXIgZnVuY3Rpb25zCisg
ICAgICAgIGludG8gIkNvbW1vbi5jcHAiIGFuZCAiV2luTWFpbi5jcHAiLiBUaGVzZSBmaWxlcyBh
cmUgZGlzdGluY3QKKyAgICAgICAgdG8gYWxsb3cgc29tZSBpbnRlcm5hbCB0b29scyB0byByZXVz
ZSB0aGUgY29kZSBpbiAnQ29tbW9uJy4KKworICAgICAgICAqIFdpbkxhdW5jaGVyL0NvbW1vbi5j
cHA6IEFkZGVkLiBDb25zaXN0cyBvZiBjb2RlIG1vdmVkIGZyb20KKyAgICAgICAgJ1dpbkxhdW5j
aGVyLmNwcCcgdGhhdCBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciB0b29scy4KKyAgICAgICAgKHN1
YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdyk6CisgICAgICAgIChjb21wdXRlRnVsbERlc2t0b3BGcmFt
ZSk6CisgICAgICAgIChEbGxNYWluKToKKyAgICAgICAgKGdldEFwcERhdGFGb2xkZXIpOgorICAg
ICAgICAoc2V0Q2FjaGVGb2xkZXIpOgorICAgICAgICAoY3JlYXRlQ3Jhc2hSZXBvcnQpOgorICAg
ICAgICAoQWJvcnRQcm9jKToKKyAgICAgICAgKGdldFByaW50ZXJEQyk6CisgICAgICAgIChpbml0
RG9jU3RydWN0KToKKyAgICAgICAgKFByaW50Vmlldyk6CisgICAgICAgIChUb2dnbGVNZW51SXRl
bSk6CisgICAgICAgIChXbmRQcm9jKToKKyAgICAgICAgKEVkaXRQcm9jKToKKyAgICAgICAgKEJh
Y2tCdXR0b25Qcm9jKToKKyAgICAgICAgKEZvcndhcmRCdXR0b25Qcm9jKToKKyAgICAgICAgKEFi
b3V0KToKKyAgICAgICAgKGxvYWRVUkwpOgorICAgICAgICAoZGxsTGF1bmNoZXJFbnRyeVBvaW50
KToKKyAgICAgICAgKiBXaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5jcHA6IENvcGllZCBmcm9t
IFdpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmguCisgICAgICAgIChET01FdmVudExpc3RlbmVy
OjpSZWxlYXNlKToKKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6V2ViU2NyaXB0T2JqZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6fldlYlNjcmlwdE9iamVjdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJTY3JpcHRPYmplY3Q6OnRocm93RXhjZXB0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6Y2FsbFdlYlNjcmlwdE1ldGhvZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJTY3JpcHRPYmplY3Q6OmV2YWx1YXRlV2ViU2NyaXB0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6cmVtb3ZlV2ViU2NyaXB0S2V5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYlNjcmlwdE9iamVjdDo6c3RyaW5nUmVwcmVzZW50YXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0Ojp3ZWJTY3JpcHRWYWx1ZUF0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpzZXRXZWJTY3JpcHRWYWx1ZUF0SW5k
ZXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViU2NyaXB0T2JqZWN0OjpzZXRFeGNlcHRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0ZW5lcjo6dGhyb3dFeGNlcHRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0ZW5lcjo6Y2FsbFdlYlNjcmlwdE1ldGhvZCk6IERl
bGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpldmFsdWF0ZVdlYlNjcmlwdCk6IERl
bGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpyZW1vdmVXZWJTY3JpcHRLZXkpOiBE
ZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0ZW5lcjo6c3RyaW5nUmVwcmVzZW50YXRpb24p
OiBEZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0ZW5lcjo6d2ViU2NyaXB0VmFsdWVBdElu
ZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6OnNldFdlYlNjcmlwdFZh
bHVlQXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpzZXRFeGNl
cHRpb24pOiBEZWxldGVkLgorICAgICAgICAoRE9NRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQp
OiBEZWxldGVkLgorICAgICAgICAqIFdpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmg6CisgICAg
ICAgIChXZWJTY3JpcHRPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYlNjcmlwdE9iamVjdDo6QWRkUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlNjcmlwdE9i
amVjdDo6UmVsZWFzZSk6IERlbGV0ZWQuCisgICAgICAgIChET01PYmplY3Q6OlF1ZXJ5SW50ZXJm
YWNlKTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6OlF1ZXJ5SW50ZXJmYWNl
KTogRGVsZXRlZC4KKyAgICAgICAgKERPTUV2ZW50TGlzdGVuZXI6OkFkZFJlZik6IERlbGV0ZWQu
CisgICAgICAgIChET01FdmVudExpc3RlbmVyOjpSZWxlYXNlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHA6IENvbnZlcnRlZCBzdGFuZC1hbG9uZSBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBpbnRvIGEgQysrIGNsYXNzIGFuZCByZW1vdmVkIFdpbkFQSSBj
b2RlLgorICAgICAgICAoV2luTGF1bmNoZXI6OldpbkxhdW5jaGVyKToKKyAgICAgICAgKFdpbkxh
dW5jaGVyOjppbml0KToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpwcmVwYXJlVmlld3MpOgorICAg
ICAgICAoV2luTGF1bmNoZXI6OnNldEZyYW1lTG9hZERlbGVnYXRlKToKKyAgICAgICAgKFdpbkxh
dW5jaGVyOjpzZXRVSURlbGVnYXRlKToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpzZXRBY2Nlc3Np
YmlsaXR5RGVsZWdhdGUpOgorICAgICAgICAoV2luTGF1bmNoZXI6Om1haW5GcmFtZSk6CisgICAg
ICAgIChXaW5MYXVuY2hlcjo6c2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMpOgorICAgICAg
ICAoV2luTGF1bmNoZXI6OnNldFRvRGVmYXVsdFByZWZlcmVuY2VzKToKKyAgICAgICAgKHVwZGF0
ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2luTGF1bmNoZXI6OnNob3dMYXN0
VmlzaXRlZFNpdGVzKToKKyAgICAgICAgKFdpbkxhdW5jaGVyOjpsYXVuY2hJbnNwZWN0b3IpOgor
ICAgICAgICAoV2luTGF1bmNoZXI6Om5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQpOgorICAgICAg
ICAoV2luTGF1bmNoZXI6Om5hdmlnYXRlVG9IaXN0b3J5KToKKyAgICAgICAgKFdpbkxhdW5jaGVy
Ojpnb0JhY2spOgorICAgICAgICAoV2luTGF1bmNoZXI6OmdvRm9yd2FyZCk6CisgICAgICAgIChX
aW5MYXVuY2hlcjo6bG9hZFVSTCk6CisgICAgICAgIChzaG91bGRVc2VGdWxsRGVza3RvcCk6IERl
bGV0ZWQuCisgICAgICAgIChTaW1wbGVFdmVudExpc3RlbmVyOjpTaW1wbGVFdmVudExpc3RlbmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFNpbXBsZUV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6dXBkYXRlQWRkcmVzc0Jhcik6
IERlbGV0ZWQuCisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZhaWxQcm92aXNpb25h
bExvYWRXaXRoRXJyb3IpOiBEZWxldGVkLgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpR
dWVyeUludGVyZmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OkFk
ZFJlZik6IERlbGV0ZWQuCisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OlJlbGVhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoc2hvd0xhc3RWaXNpdGVkU2l0ZXMpOiBEZWxldGVkLgorICAgICAg
ICAoV2luTGF1bmNoZXJXZWJIb3N0OjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUpOiBEZWxldGVkLgor
ICAgICAgICAocmVzaXplU3ViVmlld3MpOiBEZWxldGVkLgorICAgICAgICAoc3ViY2xhc3NGb3JM
YXllcmVkV2luZG93KTogRGVsZXRlZC4KKyAgICAgICAgKGNvbXB1dGVGdWxsRGVza3RvcEZyYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKERsbE1haW4pOiBEZWxldGVkLgorICAgICAgICAoZ2V0QXBw
RGF0YUZvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcyk6
IERlbGV0ZWQuCisgICAgICAgIChzZXRDYWNoZUZvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChj
cmVhdGVDcmFzaFJlcG9ydCk6IERlbGV0ZWQuCisgICAgICAgICh3V2luTWFpbik6IERlbGV0ZWQu
CisgICAgICAgIChNeVJlZ2lzdGVyQ2xhc3MpOiBEZWxldGVkLgorICAgICAgICAoQWJvcnRQcm9j
KTogRGVsZXRlZC4KKyAgICAgICAgKGdldFByaW50ZXJEQyk6IERlbGV0ZWQuCisgICAgICAgIChp
bml0RG9jU3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFByaW50Vmlldyk6IERlbGV0ZWQuCisg
ICAgICAgIChUb2dnbGVNZW51SXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChMYXVuY2hJbnNwZWN0
b3IpOiBEZWxldGVkLgorICAgICAgICAoTmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZCk6IERlbGV0
ZWQuCisgICAgICAgIChOYXZpZ2F0ZVRvSGlzdG9yeSk6IERlbGV0ZWQuCisgICAgICAgIChXbmRQ
cm9jKTogRGVsZXRlZC4KKyAgICAgICAgKEVkaXRQcm9jKTogRGVsZXRlZC4KKyAgICAgICAgKEJh
Y2tCdXR0b25Qcm9jKTogRGVsZXRlZC4KKyAgICAgICAgKEZvcndhcmRCdXR0b25Qcm9jKTogRGVs
ZXRlZC4KKyAgICAgICAgKEFib3V0KTogRGVsZXRlZC4KKyAgICAgICAgKGxvYWRVUkwpOiBEZWxl
dGVkLgorICAgICAgICAoZGxsTGF1bmNoZXJFbnRyeVBvaW50KTogRGVsZXRlZC4KKyAgICAgICAg
KiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFdpbkxhdW5j
aGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4cHJvajoKKyAgICAgICAg
KiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci52Y3hwcm9qL1dpbkxhdW5jaGVyTGliLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgKiBXaW5MYXVuY2hlci9XaW5MYXVuY2hlclJlcGxhY2UuaDoKKyAg
ICAgICAgKHByb2Nlc3NDcmFzaFJlcG9ydCk6CisgICAgICAgICogV2luTGF1bmNoZXIvV2luTGF1
bmNoZXJXZWJIb3N0LmNwcDogQWRkZWQuCisgICAgICAgIChTaW1wbGVFdmVudExpc3RlbmVyOjpT
aW1wbGVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFNpbXBsZUV2ZW50TGlzdGVuZXI6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6dXBkYXRlQWRkcmVzc0Jhcik6
CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRo
RXJyb3IpOgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpRdWVyeUludGVyZmFjZSk6Cisg
ICAgICAgIChXaW5MYXVuY2hlcldlYkhvc3Q6OkFkZFJlZik6CisgICAgICAgIChXaW5MYXVuY2hl
cldlYkhvc3Q6OlJlbGVhc2UpOgorICAgICAgICAoV2luTGF1bmNoZXJXZWJIb3N0OjpkaWRGaW5p
c2hMb2FkRm9yRnJhbWUpOgorICAgICAgICAqIFdpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9z
dC5oOiBDb3BpZWQgZnJvbSBXaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oLgorICAgICAgICBNb3Zl
ZCBXaW5MYXVuY2hlcldlYkhvc3QgaW1wbGVtZW50YXRpb24gZnJvbSBXaW5MYXVuY2hlci5jcHAg
aW50bworICAgICAgICBpdHMgb3duIHNldCBvZiBmaWxlcy4KKyAgICAgICAgKFdpbkxhdW5jaGVy
V2ViSG9zdDo6V2luTGF1bmNoZXJXZWJIb3N0KToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9z
dDo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXaW5MYXVuY2hl
cldlYkhvc3Q6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1l
KToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkUmVjZWl2ZVRpdGxlKToKKyAgICAg
ICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6ZGlkQ2hhbmdlSWNvbnMpOgorICAgICAgICAoV2luTGF1
bmNoZXJXZWJIb3N0OjpkaWRSZWNlaXZlSWNvbik6CisgICAgICAgIChXaW5MYXVuY2hlcldlYkhv
c3Q6OmRpZEZhaWxMb2FkV2l0aEVycm9yKToKKyAgICAgICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6
ZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUpOgorICAgICAgICAoV2luTGF1bmNo
ZXJXZWJIb3N0Ojp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkwpOgorICAgICAgICAoV2lu
TGF1bmNoZXJXZWJIb3N0OjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKToKKyAgICAg
ICAgKFdpbkxhdW5jaGVyV2ViSG9zdDo6d2lsbENsb3NlRnJhbWUpOgorICAgICAgICAoV2luTGF1
bmNoZXJXZWJIb3N0Ojp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUpOgorICAgICAgICAoV2lu
TGF1bmNoZXJXZWJIb3N0OjpkaWRDbGVhcldpbmRvd09iamVjdCk6CisgICAgICAgICogV2luTGF1
bmNoZXIvV2luTWFpbi5jcHA6IEFkZGVkLiBUaGlzIGNvbnNpc3RzIG9mIGNvZGUgZnJvbQorICAg
ICAgICBXaW5MYXVuY2hlciB0aGF0IGlzIHVuaXF1ZSB0byB0aGUgV2luTGF1bmNoZXIgdXRpbGl0
eSwgYW5kIGlzCisgICAgICAgIG5vdCBwYXJ0IG9mIHRoZSBXaW5MYXVuY2hlciBjbGFzcy4KKyAg
ICAgICAgKHdXaW5NYWluKToKKyAgICAgICAgKE15UmVnaXN0ZXJDbGFzcyk6CisKIDIwMTQtMDYt
MjMgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRW5h
YmxlIHRoZSBXZWIgSW5zcGVjdG9yIGluIE1pbmlCcm93c2VyCkluZGV4OiBUb29scy9XaW5MYXVu
Y2hlci9Db21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0NvbW1vbi5j
cHAJKHJldmlzaW9uIDApCisrKyBUb29scy9XaW5MYXVuY2hlci9Db21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2VsZXJhdG9yLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxleCBDaHJpc3RlbnNlbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJE
T01EZWZhdWx0SW1wbC5oIgorI2luY2x1ZGUgIlByaW50V2ViVUlEZWxlZ2F0ZS5oIgorI2luY2x1
ZGUgIldpbkxhdW5jaGVyLmgiCisjaW5jbHVkZSAiV2luTGF1bmNoZXJSZXBsYWNlLmgiCisjaW5j
bHVkZSA8V2ViS2l0L1dlYktpdENPTUFQSS5oPgorI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3Mu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9DRlJ1bkxvb3AuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y2Fzc2VydD4K
KyNpbmNsdWRlIDxjb21pcC5oPgorI2luY2x1ZGUgPGNvbW1jdHJsLmg+CisjaW5jbHVkZSA8Y29t
bWRsZy5oPgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KKyNpbmNsdWRlIDxkYmdoZWxwLmg+CisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPG9iamJhc2UuaD4KKyNpbmNsdWRlIDxzaGVsbGFwaS5o
PgorI2luY2x1ZGUgPHNobG9iai5oPgorI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNpbmNsdWRlIDxz
dHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHdpbmluZXQuaD4KKworI2RlZmlu
ZSBNQVhfTE9BRFNUUklORyAxMDAKKyNkZWZpbmUgVVJMQkFSX0hFSUdIVCAgMjQKKyNkZWZpbmUg
Q09OVFJPTEJVVFRPTl9XSURUSCAyNAorCitzdGF0aWMgY29uc3QgaW50IG1heEhpc3RvcnlTaXpl
ID0gMTA7CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1lLCAmX191dWlk
b2YoSVdlYkZyYW1lKT4+IElXZWJGcmFtZVB0cjsKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYk11dGFibGVVUkxSZXF1ZXN0LCAmX191dWlkb2YoSVdlYk11dGFibGVVUkxSZXF1ZXN0
KT4+IElXZWJNdXRhYmxlVVJMUmVxdWVzdFB0cjsKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYkNhY2hlLCAmX191dWlkb2YoSVdlYkNhY2hlKT4+IElXZWJDYWNoZVB0cjsKKworLy8g
R2xvYmFsIFZhcmlhYmxlczoKK0hJTlNUQU5DRSBoSW5zdDsKK0hXTkQgaE1haW5XbmQ7CitIV05E
IGhVUkxCYXJXbmQ7CitIV05EIGhCYWNrQnV0dG9uV25kOworSFdORCBoRm9yd2FyZEJ1dHRvbldu
ZDsKK1dORFBST0MgRGVmRWRpdFByb2MgPSBudWxscHRyOworV05EUFJPQyBEZWZCdXR0b25Qcm9j
ID0gbnVsbHB0cjsKK1dORFBST0MgRGVmV2ViS2l0UHJvYyA9IG51bGxwdHI7CitIV05EIGdWaWV3
V2luZG93ID0gMDsKK1dpbkxhdW5jaGVyKiBnV2luTGF1bmNoZXIgPSBudWxscHRyOworVENIQVIg
c3pUaXRsZVtNQVhfTE9BRFNUUklOR107IC8vIFRoZSB0aXRsZSBiYXIgdGV4dAorVENIQVIgc3pX
aW5kb3dDbGFzc1tNQVhfTE9BRFNUUklOR107IC8vIHRoZSBtYWluIHdpbmRvdyBjbGFzcyBuYW1l
CisKKy8vIFN1cHBvcnQgbW92aW5nIHRoZSB0cmFuc3BhcmVudCB3aW5kb3cKK1BPSU5UIHNfd2lu
ZG93UG9zaXRpb24gPSB7IDEwMCwgMTAwIH07CitTSVpFIHNfd2luZG93U2l6ZSA9IHsgODAwLCA0
MDAgfTsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGluY2x1ZGVkIGlu
IHRoaXMgY29kZSBtb2R1bGU6CitBVE9NIE15UmVnaXN0ZXJDbGFzcyhISU5TVEFOQ0UgaEluc3Rh
bmNlKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7CitJTlRfUFRSIENBTExCQUNLIEFib3V0KEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsK
K0xSRVNVTFQgQ0FMTEJBQ0sgRWRpdFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwor
TFJFU1VMVCBDQUxMQkFDSyBCYWNrQnV0dG9uUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7CitMUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJB
TSwgTFBBUkFNKTsKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVsb2FkQnV0dG9uUHJvYyhIV05ELCBVSU5U
LCBXUEFSQU0sIExQQVJBTSk7CisKK3N0YXRpYyB2b2lkIGxvYWRVUkwoQlNUUiB1cmxCU3RyKTsK
Kworc3RhdGljIHZvaWQgcmVzaXplU3ViVmlld3MoKQoreworICAgIGlmIChnV2luTGF1bmNoZXIt
PnVzZXNMYXllcmVkV2ViVmlldygpIHx8ICFnVmlld1dpbmRvdykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUkVDVCByY0NsaWVudDsKKyAgICBHZXRDbGllbnRSZWN0KGhNYWluV25kLCAmcmNDbGll
bnQpOworICAgIE1vdmVXaW5kb3coaEJhY2tCdXR0b25XbmQsIDAsIDAsIENPTlRST0xCVVRUT05f
V0lEVEgsIFVSTEJBUl9IRUlHSFQsIFRSVUUpOworICAgIE1vdmVXaW5kb3coaEZvcndhcmRCdXR0
b25XbmQsIENPTlRST0xCVVRUT05fV0lEVEgsIDAsIENPTlRST0xCVVRUT05fV0lEVEgsIFVSTEJB
Ul9IRUlHSFQsIFRSVUUpOworICAgIE1vdmVXaW5kb3coaFVSTEJhclduZCwgQ09OVFJPTEJVVFRP
Tl9XSURUSCAqIDIsIDAsIHJjQ2xpZW50LnJpZ2h0LCBVUkxCQVJfSEVJR0hULCBUUlVFKTsKKyAg
ICBNb3ZlV2luZG93KGdWaWV3V2luZG93LCAwLCBVUkxCQVJfSEVJR0hULCByY0NsaWVudC5yaWdo
dCwgcmNDbGllbnQuYm90dG9tIC0gVVJMQkFSX0hFSUdIVCwgVFJVRSk7Cit9CisKK3N0YXRpYyB2
b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpCit7CisgICAgaE1haW5XbmQgPSBnVmlld1dp
bmRvdzsKKyNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8IGRlZmluZWQgX1dJTjY0CisgICAgRGVmV2Vi
S2l0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oOjpHZXRXaW5kb3dMb25nUHRyKGhN
YWluV25kLCBHV0xQX1dORFBST0MpKTsKKyAgICA6OlNldFdpbmRvd0xvbmdQdHIoaE1haW5XbmQs
IEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oV25kUHJvYykpOworI2Vs
c2UKKyAgICBEZWZXZWJLaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPig6OkdldFdp
bmRvd0xvbmcoaE1haW5XbmQsIEdXTF9XTkRQUk9DKSk7CisgICAgOjpTZXRXaW5kb3dMb25nKGhN
YWluV25kLCBHV0xfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oV25kUHJvYykp
OworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCkKK3sK
KyAgICBSRUNUIGRlc2t0b3A7CisgICAgaWYgKCE6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9H
RVRXT1JLQVJFQSwgMCwgc3RhdGljX2Nhc3Q8dm9pZCo+KCZkZXNrdG9wKSwgMCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNfd2luZG93UG9zaXRpb24ueCA9IDA7CisgICAgc193aW5kb3dQb3Np
dGlvbi55ID0gMDsKKyAgICBzX3dpbmRvd1NpemUuY3ggPSBkZXNrdG9wLnJpZ2h0IC0gZGVza3Rv
cC5sZWZ0OworICAgIHNfd2luZG93U2l6ZS5jeSA9IGRlc2t0b3AuYm90dG9tIC0gZGVza3RvcC50
b3A7Cit9CisKK0JPT0wgV0lOQVBJIERsbE1haW4oSElOU1RBTkNFIGRsbEluc3RhbmNlLCBEV09S
RCByZWFzb24sIExQVk9JRCkKK3sKKyAgICBpZiAocmVhc29uID09IERMTF9QUk9DRVNTX0FUVEFD
SCkKKyAgICAgICAgaEluc3QgPSBkbGxJbnN0YW5jZTsKKworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9ic3RyX3QmIGRpcmVjdG9yeSkKK3sKKyAg
ICB3Y2hhcl90IGFwcERhdGFEaXJlY3RvcnlbTUFYX1BBVEhdOworICAgIGlmIChGQUlMRUQoU0hH
ZXRGb2xkZXJQYXRoVygwLCBDU0lETF9MT0NBTF9BUFBEQVRBIHwgQ1NJRExfRkxBR19DUkVBVEUs
IDAsIDAsIGFwcERhdGFEaXJlY3RvcnkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
d2NoYXJfdCBleGVjdXRhYmxlUGF0aFtNQVhfUEFUSF07CisgICAgOjpHZXRNb2R1bGVGaWxlTmFt
ZVcoMCwgZXhlY3V0YWJsZVBhdGgsIE1BWF9QQVRIKTsKKyAgICA6OlBhdGhSZW1vdmVFeHRlbnNp
b25XKGV4ZWN1dGFibGVQYXRoKTsKKworICAgIGRpcmVjdG9yeSA9IF9ic3RyX3QoYXBwRGF0YURp
cmVjdG9yeSkgKyBMIlxcIiArIDo6UGF0aEZpbmRGaWxlTmFtZVcoZXhlY3V0YWJsZVBhdGgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHNldENhY2hlRm9sZGVyKCkKK3sK
KyAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGU7CisKKyAgICBIUkVTVUxUIGhyID0gV2ViS2l0Q3Jl
YXRlSW5zdGFuY2UoQ0xTSURfV2ViQ2FjaGUsIDAsIF9fdXVpZG9mKHdlYkNhY2hlKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJDYWNoZS5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBfYnN0cl90IGFwcERh
dGFGb2xkZXI7CisgICAgaWYgKCFnZXRBcHBEYXRhRm9sZGVyKGFwcERhdGFGb2xkZXIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcHBEYXRhRm9sZGVyICs9IEwiXFxjYWNoZSI7Cisg
ICAgd2ViQ2FjaGUtPnNldENhY2hlRm9sZGVyKGFwcERhdGFGb2xkZXIpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgY3JlYXRlQ3Jhc2hSZXBvcnQoRVhDRVBUSU9OX1BPSU5URVJTKiBl
eGNlcHRpb25Qb2ludGVycykKK3sKKyAgICBfYnN0cl90IGRpcmVjdG9yeTsKKworICAgIGlmICgh
Z2V0QXBwRGF0YUZvbGRlcihkaXJlY3RvcnkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
OjpTSENyZWF0ZURpcmVjdG9yeUV4KDAsIGRpcmVjdG9yeSwgMCkgIT0gRVJST1JfU1VDQ0VTUwor
ICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9IEVSUk9SX0ZJTEVfRVhJU1RTCisgICAgICAg
ICYmIDo6R2V0TGFzdEVycm9yKCkgIT0gRVJST1JfQUxSRUFEWV9FWElTVFMpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN0ZDo6d3N0cmluZyBmaWxlTmFtZSA9IGRpcmVjdG9yeSArIEwiXFxDcmFz
aFJlcG9ydC5kbXAiOworICAgIEhBTkRMRSBtaW5pRHVtcEZpbGUgPSA6OkNyZWF0ZUZpbGUoZmls
ZU5hbWUuY19zdHIoKSwgR0VORVJJQ19XUklURSwgMCwgMCwgQ1JFQVRFX0FMV0FZUywgRklMRV9B
VFRSSUJVVEVfTk9STUFMLCAwKTsKKworICAgIGlmIChtaW5pRHVtcEZpbGUgJiYgbWluaUR1bXBG
aWxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisKKyAgICAgICAgTUlOSURVTVBfRVhDRVBU
SU9OX0lORk9STUFUSU9OIG1kZWk7CisgICAgICAgIG1kZWkuVGhyZWFkSWQgPSA6OkdldEN1cnJl
bnRUaHJlYWRJZCgpOworICAgICAgICBtZGVpLkV4Y2VwdGlvblBvaW50ZXJzICA9IGV4Y2VwdGlv
blBvaW50ZXJzOworICAgICAgICBtZGVpLkNsaWVudFBvaW50ZXJzID0gMDsKKworI2lmZGVmIF9E
RUJVRworICAgICAgICBNSU5JRFVNUF9UWVBFIGR1bXBUeXBlID0gTWluaUR1bXBXaXRoRnVsbE1l
bW9yeTsKKyNlbHNlCisgICAgICAgIE1JTklEVU1QX1RZUEUgZHVtcFR5cGUgPSBNaW5pRHVtcE5v
cm1hbDsKKyNlbmRpZgorCisgICAgICAgIDo6TWluaUR1bXBXcml0ZUR1bXAoOjpHZXRDdXJyZW50
UHJvY2VzcygpLCA6OkdldEN1cnJlbnRQcm9jZXNzSWQoKSwgbWluaUR1bXBGaWxlLCBkdW1wVHlw
ZSwgJm1kZWksIDAsIDApOworICAgICAgICA6OkNsb3NlSGFuZGxlKG1pbmlEdW1wRmlsZSk7Cisg
ICAgICAgIHByb2Nlc3NDcmFzaFJlcG9ydChmaWxlTmFtZS5jX3N0cigpKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBCT09MIENBTExCQUNLIEFib3J0UHJvYyhIREMgaERDLCBpbnQgRXJyb3IpCit7Cisg
ICAgTVNHIG1zZzsKKyAgICB3aGlsZSAoOjpQZWVrTWVzc2FnZSgmbXNnLCAwLCAwLCAwLCBQTV9S
RU1PVkUpKSB7CisgICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAgOjpE
aXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyBIREMgZ2V0UHJpbnRlckRDKCkKK3sKKyAgICBQUklOVERMRyBwZGxnOworICAgIG1lbXNl
dCgmcGRsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7CisgICAgcGRsZy5sU3RydWN0U2l6ZSA9IHNp
emVvZihQUklOVERMRyk7CisgICAgcGRsZy5GbGFncyA9IFBEX1BSSU5UU0VUVVAgfCBQRF9SRVRV
Uk5EQzsKKworICAgIDo6UHJpbnREbGcoJnBkbGcpOworCisgICAgcmV0dXJuIHBkbGcuaERDOwor
fQorCitzdGF0aWMgdm9pZCBpbml0RG9jU3RydWN0KERPQ0lORk8qIGRpLCBUQ0hBUiogZG9jbmFt
ZSkKK3sKKyAgICBtZW1zZXQoZGksIDAsIHNpemVvZihET0NJTkZPKSk7CisgICAgZGktPmNiU2l6
ZSA9IHNpemVvZihET0NJTkZPKTsKKyAgICBkaS0+bHBzekRvY05hbWUgPSBkb2NuYW1lOworfQor
Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZVByaXZhdGUsICZfX3V1aWRv
ZihJV2ViRnJhbWVQcml2YXRlKT4+IElXZWJGcmFtZVByaXZhdGVQdHI7CisKK3ZvaWQgUHJpbnRW
aWV3KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQoreworICAgIEhEQyBwcmludERDID0gZ2V0UHJpbnRlckRDKCk7CisgICAgaWYgKCFwcmludERD
KSB7CisgICAgICAgIDo6TWVzc2FnZUJveFcoMCwgTCJFcnJvciBjcmVhdGluZyBwcmludGluZyBE
QyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoOjpTZXRBYm9ydFByb2MocHJpbnREQywgQWJvcnRQcm9jKSA9PSBTUF9F
UlJPUikgeworICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIEwiRXJyb3Igc2V0dGluZyB1cCBBYm9y
dFByb2MiLCBMIkVycm9yIiwgTUJfQVBQTE1PREFMIHwgTUJfT0spOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgSVdlYkZyYW1lUHRyIGZyYW1lID0gZ1dpbkxhdW5jaGVyLT5tYWluRnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJV2ViRnJhbWVQ
cml2YXRlUHRyIGZyYW1lUHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVy
ZmFjZSgmZnJhbWVQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7CisK
KyAgICBVSU5UIHBhZ2VDb3VudCA9IDA7CisgICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFn
ZUNvdW50KHByaW50REMsICZwYWdlQ291bnQpOworCisgICAgRE9DSU5GTyBkaTsKKyAgICBpbml0
RG9jU3RydWN0KCZkaSwgTCJXZWJLaXQgRG9jIik7CisgICAgOjpTdGFydERvYyhwcmludERDLCAm
ZGkpOworCisgICAgLy8gRklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCisg
ICAgdm9pZCogZ3JhcGhpY3NDb250ZXh0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsg
cGFnZSA8PSBwYWdlQ291bnQ7ICsrcGFnZSkgeworICAgICAgICA6OlN0YXJ0UGFnZShwcmludERD
KTsKKyAgICAgICAgZnJhbWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2Us
IGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKKyAgICB9CisK
KyAgICBmcmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKKwor
ICAgIDo6RW5kRG9jKHByaW50REMpOworICAgIDo6RGVsZXRlREMocHJpbnREQyk7Cit9CisKK3N0
YXRpYyB2b2lkIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCit7CisgICAg
SE1FTlUgbWVudSA9IDo6R2V0TWVudShoV25kKTsKKworICAgIE1FTlVJVEVNSU5GTyBpbmZvOwor
ICAgIDo6bWVtc2V0KCZpbmZvLCAweDAwLCBzaXplb2YoaW5mbykpOworICAgIGluZm8uY2JTaXpl
ID0gc2l6ZW9mKGluZm8pOworICAgIGluZm8uZk1hc2sgPSBNSUlNX1NUQVRFOworCisgICAgaWYg
KCE6OkdldE1lbnVJdGVtSW5mbyhtZW51LCBtZW51SUQsIEZBTFNFLCAmaW5mbykpCisgICAgICAg
IHJldHVybjsKKworICAgIEJPT0wgbmV3U3RhdGUgPSAhKGluZm8uZlN0YXRlICYgTUZTX0NIRUNL
RUQpOworCisgICAgaWYgKCFnV2luTGF1bmNoZXItPnN0YW5kYXJkUHJlZmVyZW5jZXMoKSB8fCAh
Z1dpbkxhdW5jaGVyLT5wcml2YXRlUHJlZmVyZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3dpdGNoIChtZW51SUQpIHsKKyAgICBjYXNlIElETV9BVkZPVU5EQVRJT046CisgICAgICAg
IGdXaW5MYXVuY2hlci0+c3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRBVkZvdW5kYXRpb25FbmFi
bGVkKG5ld1N0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fQUNDX0NPTVBPU0lU
SU5HOgorICAgICAgICBnV2luTGF1bmNoZXItPnByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChuZXdTdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46CisgICAgICAgIGdXaW5MYXVuY2hlci0+cHJpdmF0ZVBy
ZWZlcmVuY2VzKCktPnNldEZ1bGxTY3JlZW5FbmFibGVkKG5ld1N0YXRlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKKyAgICAgICAgZ1dpbkxhdW5j
aGVyLT5wcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd0RlYnVnQm9yZGVycyhuZXdTdGF0ZSk7
CisgICAgICAgIGdXaW5MYXVuY2hlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3dSZXBh
aW50Q291bnRlcihuZXdTdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0RJU0FC
TEVfSU1BR0VTOgorICAgICAgICBnV2luTGF1bmNoZXItPnN0YW5kYXJkUHJlZmVyZW5jZXMoKS0+
c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCFuZXdTdGF0ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSURNX0RJU0FCTEVfU1RZTEVTOgorICAgICAgICBnV2luTGF1bmNoZXItPnByaXZh
dGVQcmVmZXJlbmNlcygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCghbmV3U3RhdGUp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9ESVNBQkxFX0pBVkFTQ1JJUFQ6CisgICAg
ICAgIGdXaW5MYXVuY2hlci0+c3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZCghbmV3U3RhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9ESVNBQkxFX0xP
Q0FMX0ZJTEVfUkVTVFJJQ1RJT05TOgorICAgICAgICBnV2luTGF1bmNoZXItPnByaXZhdGVQcmVm
ZXJlbmNlcygpLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhuZXdTdGF0ZSk7
CisgICAgICAgIGdXaW5MYXVuY2hlci0+cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFsbG93Rmls
ZUFjY2Vzc0Zyb21GaWxlVVJMcyhuZXdTdGF0ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGluZm8uZlN0YXRlID0gKG5ld1N0YXRlKSA/IE1GU19DSEVDS0VEIDogTUZTX1VOQ0hFQ0tF
RDsKKworICAgIDo6U2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1lbnVJRCwgRkFMU0UsICZpbmZvKTsK
K30KKworc3RhdGljIGNvbnN0IGludCBkcmFnQmFySGVpZ2h0ID0gMzA7CisKK0xSRVNVTFQgQ0FM
TEJBQ0sgV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbSkKK3sKKyAgICBXTkRQUk9DIHBhcmVudFByb2MgPSAoZ1dpbkxhdW5jaGVyKSA/
IChnV2luTGF1bmNoZXItPnVzZXNMYXllcmVkV2ViVmlldygpID8gRGVmV2ViS2l0UHJvYyA6IERl
ZldpbmRvd1Byb2MpIDogRGVmV2luZG93UHJvYzsKKworICAgIHN3aXRjaCAobWVzc2FnZSkgewor
ICAgIGNhc2UgV01fTkNISVRURVNUOgorICAgICAgICBpZiAoZ1dpbkxhdW5jaGVyICYmIGdXaW5M
YXVuY2hlci0+dXNlc0xheWVyZWRXZWJWaWV3KCkpIHsKKyAgICAgICAgICAgIFJFQ1Qgd2luZG93
OworICAgICAgICAgICAgOjpHZXRXaW5kb3dSZWN0KGhXbmQsICZ3aW5kb3cpOworICAgICAgICAg
ICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lv
biB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCisgICAgICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJp
Z2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUg
d2hhdCdzCisgICAgICAgICAgICAvLyB1bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0
aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNlIGFuIGFyYml0cmFyeQorICAgICAgICAgICAgLy8gMzAg
cGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGlu
ZyBsb2NhdGlvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSB3
aXRoaW4gdGhpcyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50
IHRvCisgICAgICAgICAgICAvLyB0cmVhdCB0aGlzIHJlZ2lvbiBhcyBpZiBpdCB3ZXJlIHRoZSB0
aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93LgorICAgICAgICAgICAgaW50IHkgPSBISVdPUkQo
bFBhcmFtKTsKKworICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3aW5k
b3cudG9wICsgZHJhZ0JhckhlaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElP
TjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywg
aFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgIGNhc2UgV01fQ09NTUFORDogewor
ICAgICAgICBpbnQgd21JZCA9IExPV09SRCh3UGFyYW0pOworICAgICAgICBpbnQgd21FdmVudCA9
IEhJV09SRCh3UGFyYW0pOworICAgICAgICBpZiAod21JZCA+PSBJRE1fSElTVE9SWV9MSU5LMCAm
JiB3bUlkIDw9IElETV9ISVNUT1JZX0xJTks5KSB7CisgICAgICAgICAgICBpZiAoZ1dpbkxhdW5j
aGVyKQorICAgICAgICAgICAgICAgIGdXaW5MYXVuY2hlci0+bmF2aWdhdGVUb0hpc3RvcnkoaFdu
ZCwgd21JZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBQYXJz
ZSB0aGUgbWVudSBzZWxlY3Rpb25zOgorICAgICAgICBzd2l0Y2ggKHdtSWQpIHsKKyAgICAgICAg
Y2FzZSBJRE1fQUJPVVQ6CisgICAgICAgICAgICBEaWFsb2dCb3goaEluc3QsIE1BS0VJTlRSRVNP
VVJDRShJRERfQUJPVVRCT1gpLCBoV25kLCBBYm91dCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJRE1fRVhJVDoKKyAgICAgICAgICAgIERlc3Ryb3lXaW5kb3coaFduZCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fUFJJTlQ6CisgICAgICAgICAgICBQ
cmludFZpZXcoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSURNX1dFQl9JTlNQRUNUT1I6CisgICAgICAgICAgICBpZiAoZ1dp
bkxhdW5jaGVyKQorICAgICAgICAgICAgICAgIGdXaW5MYXVuY2hlci0+bGF1bmNoSW5zcGVjdG9y
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRE1fSElTVE9SWV9CQUNLV0FS
RDoKKyAgICAgICAgY2FzZSBJRE1fSElTVE9SWV9GT1JXQVJEOgorICAgICAgICAgICAgaWYgKGdX
aW5MYXVuY2hlcikKKyAgICAgICAgICAgICAgICBnV2luTGF1bmNoZXItPm5hdmlnYXRlRm9yd2Fy
ZE9yQmFja3dhcmQoaFduZCwgd21JZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJRE1fQVZGT1VOREFUSU9OOgorICAgICAgICBjYXNlIElETV9BQ0NfQ09NUE9TSVRJTkc6Cisg
ICAgICAgIGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46CisgICAgICAgIGNhc2UgSURNX0NPTVBPU0lU
SU5HX0JPUkRFUlM6CisgICAgICAgIGNhc2UgSURNX0RJU0FCTEVfSU1BR0VTOgorICAgICAgICBj
YXNlIElETV9ESVNBQkxFX1NUWUxFUzoKKyAgICAgICAgY2FzZSBJRE1fRElTQUJMRV9KQVZBU0NS
SVBUOgorICAgICAgICBjYXNlIElETV9ESVNBQkxFX0xPQ0FMX0ZJTEVfUkVTVFJJQ1RJT05TOgor
ICAgICAgICAgICAgVG9nZ2xlTWVudUl0ZW0oaFduZCwgd21JZCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhw
YXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0RFU1RST1k6CisjaWYgVVNFKENG
KQorICAgICAgICBDRlJ1bkxvb3BTdG9wKENGUnVuTG9vcEdldE1haW4oKSk7CisjZW5kaWYKKyAg
ICAgICAgUG9zdFF1aXRNZXNzYWdlKDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NJ
WkU6CisgICAgICAgIGlmICghZ1dpbkxhdW5jaGVyIHx8ICFnV2luTGF1bmNoZXItPmhhc1dlYlZp
ZXcoKSB8fCBnV2luTGF1bmNoZXItPnVzZXNMYXllcmVkV2ViVmlldygpKQorICAgICAgICAgICAg
cmV0dXJuIENhbGxXaW5kb3dQcm9jKHBhcmVudFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKTsKKworICAgICAgICByZXNpemVTdWJWaWV3cygpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFdu
ZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitMUkVTVUxUIENBTExCQUNLIEVkaXRQcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFS
QU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAg
IGNhc2UgV01fQ0hBUjoKKyAgICAgICAgaWYgKHdQYXJhbSA9PSAxMykgeyAvLyBFbnRlciBLZXkK
KyAgICAgICAgICAgIHdjaGFyX3Qgc3RyUHRyW0lOVEVSTkVUX01BWF9VUkxfTEVOR1RIXTsKKyAg
ICAgICAgICAgICooKExQV09SRClzdHJQdHIpID0gSU5URVJORVRfTUFYX1VSTF9MRU5HVEg7IAor
ICAgICAgICAgICAgaW50IHN0ckxlbiA9IFNlbmRNZXNzYWdlKGhEbGcsIEVNX0dFVExJTkUsIDAs
IChMUEFSQU0pc3RyUHRyKTsKKworICAgICAgICAgICAgc3RyUHRyW3N0ckxlbl0gPSAwOworICAg
ICAgICAgICAgX2JzdHJfdCBic3RyKHN0clB0cik7CisgICAgICAgICAgICBsb2FkVVJMKGJzdHIu
R2V0QlNUUigpKTsKKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGxXaW5kb3dQcm9jKERlZkVkaXRQcm9jLCBoRGxnLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgfQorfQorCitMUkVTVUxUIENBTExCQUNLIEJh
Y2tCdXR0b25Qcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTEJVVFRP
TlVQOgorICAgICAgICBnV2luTGF1bmNoZXItPmdvQmFjaygpOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhEZWZCdXR0b25Qcm9jLCBoRGxnLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSk7CisgICAgfQorfQorCitMUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0
b25Qcm9jKEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBh
cmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTEJVVFRPTlVQOgor
ICAgICAgICBnV2luTGF1bmNoZXItPmdvRm9yd2FyZCgpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBDYWxsV2luZG93UHJvYyhEZWZCdXR0b25Qcm9jLCBoRGxnLCBtZXNzYWdlLCB3UGFy
YW0sIGxQYXJhbSk7CisgICAgfQorfQorCisvLyBNZXNzYWdlIGhhbmRsZXIgZm9yIGFib3V0IGJv
eC4KK0lOVF9QVFIgQ0FMTEJBQ0sgQWJvdXQoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJB
TSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7CisgICAgVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihs
UGFyYW0pOworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fSU5JVERJQUxPRzoK
KyAgICAgICAgcmV0dXJuIChJTlRfUFRSKVRSVUU7CisKKyAgICBjYXNlIFdNX0NPTU1BTkQ6Cisg
ICAgICAgIGlmIChMT1dPUkQod1BhcmFtKSA9PSBJRE9LIHx8IExPV09SRCh3UGFyYW0pID09IElE
Q0FOQ0VMKSB7CisgICAgICAgICAgICBFbmREaWFsb2coaERsZywgTE9XT1JEKHdQYXJhbSkpOwor
ICAgICAgICAgICAgcmV0dXJuIChJTlRfUFRSKVRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHJldHVybiAoSU5UX1BUUilGQUxTRTsKK30KKworc3RhdGljIHZvaWQg
bG9hZFVSTChCU1RSIHBhc3NlZFVSTCkKK3sKKyAgICBpZiAoRkFJTEVEKGdXaW5MYXVuY2hlci0+
bG9hZFVSTChwYXNzZWRVUkwpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2V0Rm9jdXMoZ1Zp
ZXdXaW5kb3cpOworfQorCitleHRlcm4gIkMiIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBpbnQgV0lO
QVBJIGRsbExhdW5jaGVyRW50cnlQb2ludChISU5TVEFOQ0UgaEluc3RhbmNlLCBISU5TVEFOQ0Ug
aFByZXZJbnN0YW5jZSwgTFBXU1RSIGxwc3RyQ21kTGluZSwgaW50IG5DbWRTaG93KQoreworICAg
IHJldHVybiB3V2luTWFpbihoSW5zdGFuY2UsIGhQcmV2SW5zdGFuY2UsIGxwc3RyQ21kTGluZSwg
bkNtZFNob3cpOworfQpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvRE9NRGVmYXVsdEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmNwcAkocmV2
aXNpb24gMTcwMjk5KQkoZnJvbSBUb29scy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5oOjE3
MDI5OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255
IEpvaG5zb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQnJl
bnQgRnVsZ2hhbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRE9NRGVmYXVsdEltcGxfaAorI2RlZmluZSBE
T01EZWZhdWx0SW1wbF9oCisKKyNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Lmg+CisKK2NsYXNzIFdl
YlNjcmlwdE9iamVjdCA6IHB1YmxpYyBJV2ViU2NyaXB0T2JqZWN0IHsKK3B1YmxpYzoKKyAgICBX
ZWJTY3JpcHRPYmplY3QoKSA6IG1fcmVmQ291bnQoMCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB+V2ViU2NyaXB0T2JqZWN0KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gSVVua25vd24K
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVG
SUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKHZvaWQpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZ
UEUgUmVsZWFzZSh2b2lkKTsKKworICAgIC8vIElXZWJTY3JpcHRPYmplY3QKKyAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdGhyb3dFeGNlcHRpb24oQlNUUiwgQk9PTCopIHsg
cmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBjYWxsV2ViU2NyaXB0TWV0aG9kKEJTVFIsIGNvbnN0IFZBUklBTlRbXSwgaW50LCBWQVJJQU5U
KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGV2YWx1YXRlV2ViU2NyaXB0KEJTVFIsIFZBUklBTlQqKSB7IHJldHVybiBFX05PVElN
UEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVtb3ZlV2ViU2Ny
aXB0S2V5KEJTVFIpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBzdHJpbmdSZXByZXNlbnRhdGlvbihCU1RSKikgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYlNjcmlw
dFZhbHVlQXRJbmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQqKSAgeyByZXR1cm4gRV9OT1RJTVBM
OyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYlNjcmlwdFZh
bHVlQXRJbmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQpICB7IHJldHVybiBFX05PVElNUEw7IH0K
KyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RXhjZXB0aW9uKEJTVFIp
ICB7IHJldHVybiBFX05PVElNUEw7IH0KKworcHJvdGVjdGVkOgorICAgIFVMT05HIG1fcmVmQ291
bnQ7Cit9OworCisKK2NsYXNzIERPTU9iamVjdCA6IHB1YmxpYyBXZWJTY3JpcHRPYmplY3QsIHB1
YmxpYyBJRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9p
ZCoqIHBwdk9iamVjdCk7Cit9OworCisKK2NsYXNzIERPTUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMg
RE9NT2JqZWN0LCBwdWJsaWMgSURPTUV2ZW50TGlzdGVuZXIgeworcHVibGljOgorICAgIC8vIElV
bmtub3duCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJm
YWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVMT05HIFNU
RE1FVEhPRENBTExUWVBFIEFkZFJlZih2b2lkKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhP
RENBTExUWVBFIFJlbGVhc2Uodm9pZCk7CisKKyAgICAvLyBJV2ViU2NyaXB0T2JqZWN0CisgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHRocm93RXhjZXB0aW9uKEJTVFIsIEJP
T0wqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIGNhbGxXZWJTY3JpcHRNZXRob2QoQlNUUiwgY29uc3QgVkFSSUFOVFtdLCBpbnQs
IFZBUklBTlQqKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGV2YWx1YXRlV2ViU2NyaXB0KEJTVFIsIFZBUklBTlQqKSAgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJl
bW92ZVdlYlNjcmlwdEtleShCU1RSKSAgeyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHN0cmluZ1JlcHJlc2VudGF0aW9uKEJTVFIqKSAg
eyByZXR1cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHdlYlNjcmlwdFZhbHVlQXRJbmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQqKSAgeyByZXR1
cm4gRV9OT1RJTVBMOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNl
dFdlYlNjcmlwdFZhbHVlQXRJbmRleCh1bnNpZ25lZCBpbnQsIFZBUklBTlQpICB7IHJldHVybiBF
X05PVElNUEw7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RXhj
ZXB0aW9uKEJTVFIpIHsgcmV0dXJuIEVfTk9USU1QTDsgfQorCisgICAgLy8gSURPTUV2ZW50TGlz
dGVuZXIKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgaGFuZGxlRXZlbnQo
SURPTUV2ZW50KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Cit9OworCisvLyBJVW5rbm93biAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCitIUkVTVUxUIFdlYlNjcmlwdE9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIElJRF9JVW5rbm93bikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0
aWNfY2FzdDxJV2ViU2NyaXB0T2JqZWN0Kj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdV
SUQocmlpZCwgSUlEX0lXZWJTY3JpcHRPYmplY3QpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8SVdlYlNjcmlwdE9iamVjdCo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEVfTk9JTlRFUkZBQ0U7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30K
KworVUxPTkcgV2ViU2NyaXB0T2JqZWN0OjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1cm4gKytt
X3JlZkNvdW50OworfQorCitVTE9ORyBXZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2Uodm9pZCkKK3sK
KyAgICBVTE9ORyBuZXdSZWYgPSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAg
ICAgIGRlbGV0ZSh0aGlzKTsKKworICAgIHJldHVybiBuZXdSZWY7Cit9CisKKy8vIERPTU9iamVj
dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCitIUkVTVUxUIERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBwdk9iamVjdCA9IDA7CisgICAgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIElJRF9JRE9NT2JqZWN0KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0
YXRpY19jYXN0PElET01PYmplY3QqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBX
ZWJTY3JpcHRPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7CisKKyAgICBX
ZWJTY3JpcHRPYmplY3Q6OkFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCisKKy8vIERP
TUV2ZW50TGlzdGVuZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSFJFU1VMVCBET01FdmVudExpc3RlbmVyOjpRdWVy
eUludGVyZmFjZShjb25zdCBJSUQgJnJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCit7CisgICAgKnBw
dk9iamVjdCA9IDA7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JRE9NRXZlbnRMaXN0
ZW5lcikpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJRE9NRXZlbnRMaXN0ZW5l
cio+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIERPTU9iamVjdDo6UXVlcnlJbnRl
cmZhY2UocmlpZCwgcHB2T2JqZWN0KTsKKworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09L
OworfQorCitVTE9ORyBET01FdmVudExpc3RlbmVyOjpBZGRSZWYodm9pZCkKK3sKKyAgICByZXR1
cm4gV2ViU2NyaXB0T2JqZWN0OjpBZGRSZWYoKTsKK30KKworVUxPTkcgRE9NRXZlbnRMaXN0ZW5l
cjo6UmVsZWFzZSh2b2lkKQoreworICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2Uo
KTsKK30KKworI2VuZGlmCkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvRE9NRGVmYXVsdEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBUb29scy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBBbnRo
b255IEpvaG5zb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QnJlbnQgRnVsZ2hhbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCkBAIC0yNCw2OCArMjUsOCBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBET01EZWZhdWx0SW1wbF9oCi0jZGVm
aW5lIERPTURlZmF1bHRJbXBsX2gKLQotI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KLQotY2xh
c3MgV2ViU2NyaXB0T2JqZWN0IDogcHVibGljIElXZWJTY3JpcHRPYmplY3QgewotcHVibGljOgot
ICAgIFdlYlNjcmlwdE9iamVjdCgpIDogbV9yZWZDb3VudCgwKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIH5XZWJTY3JpcHRPYmplY3QoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvLyBJVW5r
bm93bgotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFj
ZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERN
RVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7Ci0gICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RD
QUxMVFlQRSBSZWxlYXNlKHZvaWQpOwotCi0gICAgLy8gSVdlYlNjcmlwdE9iamVjdAotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB0aHJvd0V4Y2VwdGlvbihCU1RSLCBCT09M
KikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGNhbGxXZWJTY3JpcHRNZXRob2QoQlNUUiwgY29uc3QgVkFSSUFOVFtdLCBpbnQsIFZB
UklBTlQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZXZhbHVhdGVXZWJTY3JpcHQoQlNUUiwgVkFSSUFOVCopIHsgcmV0dXJuIEVf
Tk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZW1vdmVX
ZWJTY3JpcHRLZXkoQlNUUikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHN0cmluZ1JlcHJlc2VudGF0aW9uKEJTVFIqKSB7IHJldHVy
biBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2Vi
U2NyaXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwgVkFSSUFOVCopICB7IHJldHVybiBFX05P
VElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0V2ViU2Ny
aXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwgVkFSSUFOVCkgIHsgcmV0dXJuIEVfTk9USU1Q
TDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRFeGNlcHRpb24o
QlNUUikgIHsgcmV0dXJuIEVfTk9USU1QTDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVUxPTkcgbV9y
ZWZDb3VudDsKLX07Ci0KLQotY2xhc3MgRE9NT2JqZWN0IDogcHVibGljIFdlYlNjcmlwdE9iamVj
dCwgcHVibGljIElET01PYmplY3QgewotcHVibGljOgotICAgIC8vIElVbmtub3duCi0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlk
LCB2b2lkKiogcHB2T2JqZWN0KTsKLX07Ci0KLQotY2xhc3MgRE9NRXZlbnRMaXN0ZW5lciA6IHB1
YmxpYyBET01PYmplY3QsIHB1YmxpYyBJRE9NRXZlbnRMaXN0ZW5lciB7Ci1wdWJsaWM6Ci0gICAg
Ly8gSVVua25vd24KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJ
bnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxP
TkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsKLQotICAgIC8vIElXZWJTY3JpcHRPYmplY3QK
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdGhyb3dFeGNlcHRpb24oQlNU
UiwgQk9PTCopICB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgY2FsbFdlYlNjcmlwdE1ldGhvZChCU1RSLCBjb25zdCBWQVJJQU5UW10s
IGludCwgVkFSSUFOVCopICB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZXZhbHVhdGVXZWJTY3JpcHQoQlNUUiwgVkFSSUFOVCopICB7
IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgcmVtb3ZlV2ViU2NyaXB0S2V5KEJTVFIpICB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc3RyaW5nUmVwcmVzZW50YXRpb24oQlNU
UiopICB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgd2ViU2NyaXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwgVkFSSUFOVCopICB7
IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgc2V0V2ViU2NyaXB0VmFsdWVBdEluZGV4KHVuc2lnbmVkIGludCwgVkFSSUFOVCkgIHsgcmV0
dXJuIEVfTk9USU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBz
ZXRFeGNlcHRpb24oQlNUUikgeyByZXR1cm4gRV9OT1RJTVBMOyB9Ci0KLSAgICAvLyBJRE9NRXZl
bnRMaXN0ZW5lcgotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBoYW5kbGVF
dmVudChJRE9NRXZlbnQqKSB7IHJldHVybiBFX05PVElNUEw7IH0KLX07CisjaW5jbHVkZSAic3Rk
YWZ4LmgiCisjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKIAogLy8gSVVua25vd24gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogSFJFU1VMVCBXZWJTY3JpcHRPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlk
LCB2b2lkKiogcHB2T2JqZWN0KQpAQCAtMTUyLDUgKzkzLDMgQEAgVUxPTkcgRE9NRXZlbnRMaXN0
ZW5lcjo6UmVsZWFzZSh2b2lkKQogewogICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlJlbGVh
c2UoKTsKIH0KLQotI2VuZGlmCkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9ET01EZWZhdWx0SW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmgJKHJl
dmlzaW9uIDE3MDI5OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL0RPTURlZmF1bHRJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDcwICs4Nyw0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgaGFuZGxlRXZlbnQoSURPTUV2ZW50KikgeyByZXR1cm4gRV9O
T1RJTVBMOyB9CiB9OwogCi0vLyBJVW5rbm93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1IUkVTVUxUIFdlYlNjcmlw
dE9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCi17
Ci0gICAgKnBwdk9iamVjdCA9IDA7Ci0gICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JVW5r
bm93bikpCi0gICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJV2ViU2NyaXB0T2JqZWN0
Kj4odGhpcyk7Ci0gICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lXZWJTY3JpcHRP
YmplY3QpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYlNjcmlwdE9iamVj
dCo+KHRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7Ci0KLSAg
ICBBZGRSZWYoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotVUxPTkcgV2ViU2NyaXB0T2JqZWN0
OjpBZGRSZWYodm9pZCkKLXsKLSAgICByZXR1cm4gKyttX3JlZkNvdW50OwotfQotCi1VTE9ORyBX
ZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2Uodm9pZCkKLXsKLSAgICBVTE9ORyBuZXdSZWYgPSAtLW1f
cmVmQ291bnQ7Ci0gICAgaWYgKCFuZXdSZWYpCi0gICAgICAgIGRlbGV0ZSh0aGlzKTsKLQotICAg
IHJldHVybiBuZXdSZWY7Ci19Ci0KLS8vIERPTU9iamVjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1IUkVTVUxUIERP
TU9iamVjdDo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCi17
Ci0gICAgKnBwdk9iamVjdCA9IDA7Ci0gICAgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JRE9N
T2JqZWN0KSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElET01PYmplY3QqPih0
aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlF1ZXJ5SW50
ZXJmYWNlKHJpaWQsIHBwdk9iamVjdCk7Ci0KLSAgICBXZWJTY3JpcHRPYmplY3Q6OkFkZFJlZigp
OwotICAgIHJldHVybiBTX09LOwotfQotCi0KLS8vIERPTUV2ZW50TGlzdGVuZXIgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotSFJFU1VMVCBET01FdmVudExpc3RlbmVyOjpRdWVyeUludGVyZmFjZShjb25zdCBJSUQgJnJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCi17Ci0gICAgKnBwdk9iamVjdCA9IDA7Ci0gICAgaWYgKElz
RXF1YWxHVUlEKHJpaWQsIElJRF9JRE9NRXZlbnRMaXN0ZW5lcikpCi0gICAgICAgICpwcHZPYmpl
Y3QgPSBzdGF0aWNfY2FzdDxJRE9NRXZlbnRMaXN0ZW5lcio+KHRoaXMpOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIERPTU9iamVjdDo6UXVlcnlJbnRlcmZhY2UocmlpZCwgcHB2T2JqZWN0KTsK
LQotICAgIEFkZFJlZigpOwotICAgIHJldHVybiBTX09LOwotfQotCi1VTE9ORyBET01FdmVudExp
c3RlbmVyOjpBZGRSZWYodm9pZCkKLXsKLSAgICByZXR1cm4gV2ViU2NyaXB0T2JqZWN0OjpBZGRS
ZWYoKTsKLX0KLQotVUxPTkcgRE9NRXZlbnRMaXN0ZW5lcjo6UmVsZWFzZSh2b2lkKQotewotICAg
IHJldHVybiBXZWJTY3JpcHRPYmplY3Q6OlJlbGVhc2UoKTsKLX0KLQogI2VuZGlmCkluZGV4OiBU
b29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2lu
TGF1bmNoZXIvV2luTGF1bmNoZXIuY3BwCShyZXZpc2lvbiAxNzAyOTkpCisrKyBUb29scy9XaW5M
YXVuY2hlci9XaW5MYXVuY2hlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2VuLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgpAQCAtMjksOSArMjksNyBAQAogI2luY2x1ZGUgInN0ZGFmeC5oIgogI2luY2x1ZGUgIldp
bkxhdW5jaGVyLmgiCiAKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaCIKICNpbmNs
dWRlICJET01EZWZhdWx0SW1wbC5oIgotI2luY2x1ZGUgIlByaW50V2ViVUlEZWxlZ2F0ZS5oIgog
I2luY2x1ZGUgIldpbkxhdW5jaGVyTGliUmVzb3VyY2UuaCIKICNpbmNsdWRlICJXaW5MYXVuY2hl
clJlcGxhY2UuaCIKICNpbmNsdWRlIDxXZWJLaXQvV2ViS2l0Q09NQVBJLmg+CkBAIC00MiwxOTEg
KzQwLDE0MyBAQAogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGUnVuTG9vcC5oPgogI2VuZGlm
CiAKLSNpZiBVU0UoR0xJQikKLSNpbmNsdWRlIDxnbGliLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxjb21pcC5oPgotI2lu
Y2x1ZGUgPGNvbW1jdHJsLmg+Ci0jaW5jbHVkZSA8Y29tbWRsZy5oPgotI2luY2x1ZGUgPGNvbXV0
aWwuaD4KLSNpbmNsdWRlIDxkYmdoZWxwLmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRl
IDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPG9iamJhc2UuaD4KLSNpbmNsdWRlIDxzaGVsbGFwaS5o
PgotI2luY2x1ZGUgPHNobG9iai5oPgotI2luY2x1ZGUgPHNobHdhcGkuaD4KKyNpbmNsdWRlIDxt
ZW1vcnk+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3
aW5pbmV0Lmg+Ci0KLSNkZWZpbmUgTUFYX0xPQURTVFJJTkcgMTAwCi0jZGVmaW5lIFVSTEJBUl9I
RUlHSFQgIDI0Ci0jZGVmaW5lIENPTlRST0xCVVRUT05fV0lEVEggMjQKIAogc3RhdGljIGNvbnN0
IGludCBtYXhIaXN0b3J5U2l6ZSA9IDEwOwogCi10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlE
PElXZWJGcmFtZSwgJl9fdXVpZG9mKElXZWJGcmFtZSk+PiBJV2ViRnJhbWVQdHI7Ci10eXBlZGVm
IF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJIaXN0b3J5LCAmX191dWlkb2YoSVdlYkhpc3Rvcnkp
Pj4gSVdlYkhpc3RvcnlQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJIaXN0
b3J5SXRlbSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5SXRlbSk+PiBJV2ViSGlzdG9yeUl0ZW1QdHI7
Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJbnNwZWN0b3IsICZfX3V1aWRvZihJ
V2ViSW5zcGVjdG9yKT4+IElXZWJJbnNwZWN0b3JQdHI7CiB0eXBlZGVmIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVx
dWVzdCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2Nv
bV9JSUlEPElXZWJQcmVmZXJlbmNlcywgJl9fdXVpZG9mKElXZWJQcmVmZXJlbmNlcyk+PiBJV2Vi
UHJlZmVyZW5jZXNQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJQcmVmZXJl
bmNlc1ByaXZhdGUsICZfX3V1aWRvZihJV2ViUHJlZmVyZW5jZXNQcml2YXRlKT4+IElXZWJQcmVm
ZXJlbmNlc1ByaXZhdGVQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJWaWV3
LCAmX191dWlkb2YoSVdlYlZpZXcpPj4gSVdlYlZpZXdQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElXZWJWaWV3UHJpdmF0ZSwgJl9fdXVpZG9mKElXZWJWaWV3UHJpdmF0ZSk+PiBJ
V2ViVmlld1ByaXZhdGVQdHI7CiB0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJDYWNo
ZSwgJl9fdXVpZG9mKElXZWJDYWNoZSk+PiBJV2ViQ2FjaGVQdHI7CiAKLS8vIEdsb2JhbCBWYXJp
YWJsZXM6Ci1ISU5TVEFOQ0UgaEluc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjdXJyZW50IGluc3RhbmNlCi1IV05EIGhNYWluV25kOwotSFdORCBoVVJMQmFyV25kOwotSFdO
RCBoQmFja0J1dHRvblduZDsKLUhXTkQgaEZvcndhcmRCdXR0b25XbmQ7Ci1XTkRQUk9DIERlZkVk
aXRQcm9jID0gMDsKLVdORFBST0MgRGVmQnV0dG9uUHJvYyA9IDA7Ci1XTkRQUk9DIERlZldlYktp
dFByb2MgPSAwOwotSVdlYkluc3BlY3RvclB0ciBnSW5zcGVjdG9yOwotSVdlYlZpZXdQdHIgZ1dl
YlZpZXc7Ci1JV2ViVmlld1ByaXZhdGVQdHIgZ1dlYlZpZXdQcml2YXRlOwotSVdlYlByZWZlcmVu
Y2VzUHRyIGdTdGFuZGFyZFByZWZlcmVuY2VzOwotSVdlYlByZWZlcmVuY2VzUHJpdmF0ZVB0ciBn
UHJlZnNQcml2YXRlOwotSFdORCBnVmlld1dpbmRvdyA9IDA7Ci1XaW5MYXVuY2hlcldlYkhvc3Qq
IGdXZWJIb3N0ID0gMDsKLVByaW50V2ViVUlEZWxlZ2F0ZSogZ1ByaW50RGVsZWdhdGUgPSAwOwot
QWNjZXNzaWJpbGl0eURlbGVnYXRlKiBnQWNjZXNzaWJpbGl0eURlbGVnYXRlID0gMDsKLUlXZWJI
aXN0b3J5UHRyIGdXZWJIaXN0b3J5Owotc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJdGVtUHRyPiBn
SGlzdG9yeUl0ZW1zOwotVENIQVIgc3pUaXRsZVtNQVhfTE9BRFNUUklOR107ICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgdGl0bGUgYmFyIHRleHQKLVRDSEFSIHN6V2luZG93Q2xhc3NbTUFYX0xP
QURTVFJJTkddOyAgICAgICAgICAgIC8vIHRoZSBtYWluIHdpbmRvdyBjbGFzcyBuYW1lCi0KLS8v
IFN1cHBvcnQgbW92aW5nIHRoZSB0cmFuc3BhcmVudCB3aW5kb3cKLVBPSU5UIHNfd2luZG93UG9z
aXRpb24gPSB7IDEwMCwgMTAwIH07Ci1TSVpFIHNfd2luZG93U2l6ZSA9IHsgODAwLCA0MDAgfTsK
LWJvb2wgc191c2VzTGF5ZXJlZFdlYlZpZXcgPSBmYWxzZTsKLWJvb2wgc19mdWxsRGVza3RvcCA9
IGZhbHNlOwotCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgaW5jbHVkZWQg
aW4gdGhpcyBjb2RlIG1vZHVsZToKLUFUT00gICAgICAgICAgICAgICAgTXlSZWdpc3RlckNsYXNz
KEhJTlNUQU5DRSBoSW5zdGFuY2UpOwotTFJFU1VMVCBDQUxMQkFDSyAgICBXbmRQcm9jKEhXTkQs
IFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUlOVF9QVFIgQ0FMTEJBQ0sgICAgQWJvdXQoSFdORCwg
VUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxMQkFDSyAgICBFZGl0UHJvYyhIV05E
LCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7Ci1MUkVTVUxUIENBTExCQUNLICAgIEJhY2tCdXR0b25Q
cm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLUxSRVNVTFQgQ0FMTEJBQ0sgICAgRm9y
d2FyZEJ1dHRvblByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOwotTFJFU1VMVCBDQUxM
QkFDSyAgICBSZWxvYWRCdXR0b25Qcm9jKEhXTkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNKTsKLQot
c3RhdGljIHZvaWQgbG9hZFVSTChCU1RSIHVybEJTdHIpOwotCi1zdGF0aWMgYm9vbCB1c2VzTGF5
ZXJlZFdlYlZpZXcoKQorV2luTGF1bmNoZXI6OldpbkxhdW5jaGVyKEhXTkQgbWFpblduZCwgSFdO
RCB1cmxCYXJXbmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZpZXcpCisgICAgOiBtX2hNYWluV25kKG1h
aW5XbmQpCisgICAgLCBtX2hVUkxCYXJXbmQodXJsQmFyV25kKQorICAgICwgbV91c2VMYXllcmVk
V2ViVmlldyh1c2VMYXllcmVkV2ViVmlldykKIHsKLSAgICByZXR1cm4gc191c2VzTGF5ZXJlZFdl
YlZpZXc7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZUZ1bGxEZXNrdG9wKCkKK0hSRVNVTFQg
V2luTGF1bmNoZXI6OmluaXQoKQogewotICAgIHJldHVybiBzX2Z1bGxEZXNrdG9wOwotfQotCi1j
bGFzcyBTaW1wbGVFdmVudExpc3RlbmVyIDogcHVibGljIERPTUV2ZW50TGlzdGVuZXIgewotcHVi
bGljOgotICAgIFNpbXBsZUV2ZW50TGlzdGVuZXIoTFBXU1RSIHR5cGUpCi0gICAgewotICAgICAg
ICB3Y3NuY3B5X3MobV9ldmVudFR5cGUsIDEwMCwgdHlwZSwgMTAwKTsKLSAgICAgICAgbV9ldmVu
dFR5cGVbOTldID0gMDsKLSAgICB9CisgICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3Rh
bmNlKENMU0lEX1dlYlZpZXcsIDAsIElJRF9JV2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZtX3dlYlZpZXcuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIGhhbmRsZUV2ZW50KElET01FdmVudCogZXZ0KQotICAgIHsKLSAgICAgICAgd2NoYXJfdCBt
ZXNzYWdlWzI1NV07Ci0gICAgICAgIHdjc2NweV9zKG1lc3NhZ2UsIDI1NSwgbV9ldmVudFR5cGUp
OwotICAgICAgICB3Y3NjYXRfcyhtZXNzYWdlLCAyNTUsIEwiIGV2ZW50IGZpcmVkISIpOwotICAg
ICAgICA6Ok1lc3NhZ2VCb3goMCwgbWVzc2FnZSwgTCJFdmVudCBIYW5kbGVyIiwgTUJfT0spOwot
ICAgICAgICByZXR1cm4gU19PSzsKLSAgICB9CisgICAgaHIgPSBtX3dlYlZpZXctPlF1ZXJ5SW50
ZXJmYWNlKElJRF9JV2ViVmlld1ByaXZhdGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93
ZWJWaWV3UHJpdmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CiAKLXByaXZhdGU6Ci0gICAgd2NoYXJfdCBtX2V2ZW50VHlwZVsx
MDBdOwotfTsKKyAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3Rvcnks
IDAsIF9fdXVpZG9mKG1fd2ViSGlzdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93
ZWJIaXN0b3J5LkdldEludGVyZmFjZVB0cigpKSk7CiAKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29t
X0lJSUQ8SVdlYkRhdGFTb3VyY2UsICZfX3V1aWRvZihJV2ViRGF0YVNvdXJjZSk+PiBJV2ViRGF0
YVNvdXJjZVB0cjsKKyAgICByZXR1cm4gaHI7Cit9CiAKLUhSRVNVTFQgV2luTGF1bmNoZXJXZWJI
b3N0Ojp1cGRhdGVBZGRyZXNzQmFyKElXZWJWaWV3KiB3ZWJWaWV3KQorSFJFU1VMVCBXaW5MYXVu
Y2hlcjo6cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCwg
Y29uc3QgQlNUUiYgcmVxdWVzdGVkVVJMLCBIV05EJiB2aWV3SHduZCkKIHsKLSAgICBJV2ViRnJh
bWVQdHIgbWFpbkZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSB3ZWJWaWV3LT5tYWluRnJhbWUoJm1h
aW5GcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAg
IHJldHVybiBFX0ZBSUw7CisKKyAgICBIUkVTVUxUIGhyID0gbV93ZWJWaWV3LT5zZXRIb3N0V2lu
ZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obWFpblduZCkpOwogICAgIGlmIChGQUlM
RUQoaHIpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgSVdl
YkRhdGFTb3VyY2VQdHIgZGF0YVNvdXJjZTsKLSAgICBociA9IG1haW5GcmFtZS0+ZGF0YVNvdXJj
ZSgmZGF0YVNvdXJjZS5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikgfHwg
IWRhdGFTb3VyY2UpCi0gICAgICAgIGhyID0gbWFpbkZyYW1lLT5wcm92aXNpb25hbERhdGFTb3Vy
Y2UoJmRhdGFTb3VyY2UuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpIHx8
ICFkYXRhU291cmNlKQotICAgICAgICByZXR1cm4gMDsKKyAgICBociA9IG1fd2ViVmlldy0+aW5p
dFdpdGhGcmFtZShjbGllbnRSZWN0LCAwLCAwKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOwogCi0gICAgSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRyIHJlcXVlc3Q7Ci0g
ICAgaHIgPSBkYXRhU291cmNlLT5yZXF1ZXN0KCZyZXF1ZXN0LkdldEludGVyZmFjZVB0cigpKTsK
LSAgICBpZiAoRkFJTEVEKGhyKSB8fCAhcmVxdWVzdCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKCFyZXF1ZXN0ZWRVUkwpIHsKKyAgICAgICAgSVdlYkZyYW1lUHRyIGZyYW1lOworICAgICAg
ICBociA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSk7Cisg
ICAgICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgX2Jz
dHJfdCBmcmFtZVVSTDsKLSAgICBociA9IHJlcXVlc3QtPm1haW5Eb2N1bWVudFVSTChmcmFtZVVS
TC5HZXRBZGRyZXNzKCkpOworICAgICAgICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoX2JzdHJfdChk
ZWZhdWx0SFRNTCkuR2V0QlNUUigpLCAwKTsKKyAgICB9CisKKyAgICBociA9IG1fd2ViVmlld1By
aXZhdGUtPnNldFRyYW5zcGFyZW50KG1fdXNlTGF5ZXJlZFdlYlZpZXcpOwogICAgIGlmIChGQUlM
RUQoaHIpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIg
PSBtX3dlYlZpZXdQcml2YXRlLT5zZXRVc2VzTGF5ZXJlZFdpbmRvdyhtX3VzZUxheWVyZWRXZWJW
aWV3KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwogCi0gICAgOjpT
ZW5kTWVzc2FnZShoVVJMQmFyV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9TRVRURVhUKSwgMCwg
cmVpbnRlcnByZXRfY2FzdDxMUEFSQU0+KGZyYW1lVVJMLkdldEJTVFIoKSkpOworICAgIGhyID0g
bV93ZWJWaWV3UHJpdmF0ZS0+dmlld1dpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUq
Pigmdmlld0h3bmQpKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBocjsKIH0KIAotSFJF
U1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3Io
SVdlYlZpZXcqLCBJV2ViRXJyb3IgKmVycm9yLCBJV2ViRnJhbWUqKQorSFJFU1VMVCBXaW5MYXVu
Y2hlcjo6c2V0RnJhbWVMb2FkRGVsZWdhdGUoSVdlYkZyYW1lTG9hZERlbGVnYXRlKiBmcmFtZUxv
YWREZWxlZ2F0ZSkKIHsKLSAgICBfYnN0cl90IGVycm9yRGVzY3JpcHRpb247Ci0gICAgSFJFU1VM
VCBociA9IGVycm9yLT5sb2NhbGl6ZWREZXNjcmlwdGlvbihlcnJvckRlc2NyaXB0aW9uLkdldEFk
ZHJlc3MoKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGVycm9yRGVzY3JpcHRpb24g
PSBMIkZhaWxlZCB0byBsb2FkIHBhZ2UgYW5kIHRvIGxvY2FsaXplIGVycm9yIGRlc2NyaXB0aW9u
LiI7Ci0KLSAgICBpZiAoX3djc2ljbXAoZXJyb3JEZXNjcmlwdGlvbiwgTCJDYW5jZWxsZWQiKSkK
LSAgICAgICAgOjpNZXNzYWdlQm94VygwLCBzdGF0aWNfY2FzdDxMUENXU1RSPihlcnJvckRlc2Ny
aXB0aW9uKSwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKKyAgICBtX2ZyYW1lTG9h
ZERlbGVnYXRlID0gZnJhbWVMb2FkRGVsZWdhdGU7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0
RnJhbWVMb2FkRGVsZWdhdGUoZnJhbWVMb2FkRGVsZWdhdGUpOworfQogCi0gICAgcmV0dXJuIFNf
T0s7CitIUkVTVUxUIFdpbkxhdW5jaGVyOjpzZXRVSURlbGVnYXRlKElXZWJVSURlbGVnYXRlKiB1
aURlbGVnYXRlKQoreworICAgIG1fdWlEZWxlZ2F0ZSA9IHVpRGVsZWdhdGU7CisgICAgcmV0dXJu
IG1fd2ViVmlldy0+c2V0VUlEZWxlZ2F0ZSh1aURlbGVnYXRlKTsKIH0KIAotSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXaW5MYXVuY2hlcldlYkhvc3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBy
aWlkLCB2b2lkKiogcHB2T2JqZWN0KQorSFJFU1VMVCBXaW5MYXVuY2hlcjo6c2V0QWNjZXNzaWJp
bGl0eURlbGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZSkKIHsKLSAgICAqcHB2T2JqZWN0ID0gMDsKLSAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlE
X0lVbmtub3duKSkKLSAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJGcmFtZUxv
YWREZWxlZ2F0ZSo+KHRoaXMpOwotICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9J
V2ViRnJhbWVMb2FkRGVsZWdhdGUpKQotICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SVdlYkZyYW1lTG9hZERlbGVnYXRlKj4odGhpcyk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
RV9OT0lOVEVSRkFDRTsKKyAgICBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZSA9IGFjY2Vzc2liaWxp
dHlEZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRBY2Nlc3NpYmlsaXR5RGVsZWdh
dGUoYWNjZXNzaWJpbGl0eURlbGVnYXRlKTsKK30KIAotICAgIEFkZFJlZigpOwotICAgIHJldHVy
biBTX09LOworSVdlYkZyYW1lUHRyIFdpbkxhdW5jaGVyOjptYWluRnJhbWUoKQoreworICAgIElX
ZWJGcmFtZVB0ciBmcmFtZVB0cjsKKyAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWVQdHIu
R2V0SW50ZXJmYWNlUHRyKCkpOworICAgIHJldHVybiBmcmFtZVB0cjsKIH0KIAotVUxPTkcgU1RE
TUVUSE9EQ0FMTFRZUEUgV2luTGF1bmNoZXJXZWJIb3N0OjpBZGRSZWYodm9pZCkKK2Jvb2wgV2lu
TGF1bmNoZXI6OnNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkKIHsKLSAgICByZXR1cm4g
KyttX3JlZkNvdW50OworICAgIElXZWJQcmVmZXJlbmNlc1B0ciB0bXBQcmVmZXJlbmNlczsKKyAg
ICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYlByZWZlcmVuY2VzLCAw
LCBJSURfSVdlYlByZWZlcmVuY2VzLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnRtcFByZWZl
cmVuY2VzLkdldEludGVyZmFjZVB0cigpKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoRkFJTEVEKHRtcFByZWZlcmVuY2VzLT5zdGFuZGFyZFByZWZlcmVuY2VzKCZtX3N0YW5k
YXJkUHJlZmVyZW5jZXMuR2V0SW50ZXJmYWNlUHRyKCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVVMT05HIFNURE1FVEhPRENBTExUWVBFIFdpbkxh
dW5jaGVyV2ViSG9zdDo6UmVsZWFzZSh2b2lkKQorYm9vbCBXaW5MYXVuY2hlcjo6c2V0VG9EZWZh
dWx0UHJlZmVyZW5jZXMoKQogewotICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3VudDsKLSAg
ICBpZiAoIW5ld1JlZikKLSAgICAgICAgZGVsZXRlKHRoaXMpOworICAgIEhSRVNVTFQgaHIgPSBt
X3N0YW5kYXJkUHJlZmVyZW5jZXMtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViUHJlZmVyZW5jZXNQ
cml2YXRlLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fcHJlZnNQcml2YXRlLkdldEludGVy
ZmFjZVB0cigpKSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyNpZiBVU0UoQ0cpCisgICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRBVkZvdW5k
YXRpb25FbmFibGVkKFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZChUUlVFKTsKKyNlbmRpZgorCisgICAgbV9wcmVmc1ByaXZhdGUtPnNl
dEZ1bGxTY3JlZW5FbmFibGVkKFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRTaG93RGVi
dWdCb3JkZXJzKEZBTFNFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvd1JlcGFpbnRDb3Vu
dGVyKEZBTFNFKTsKKworICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZChUUlVFKTsKKyAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEphdmFT
Y3JpcHRFbmFibGVkKFRSVUUpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBbGxvd1VuaXZlcnNh
bEFjY2Vzc0Zyb21GaWxlVVJMcyhGQUxTRSk7CisgICAgbV9wcmVmc1ByaXZhdGUtPnNldEFsbG93
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhUUlVFKTsKIAotICAgIHJldHVybiBuZXdSZWY7CisgICAg
bV9wcmVmc1ByaXZhdGUtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoVFJVRSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlTWVudUl0ZW1Gb3JIaXN0b3J5SXRl
bShITUVOVSBtZW51LCBJV2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtLCBpbnQgY3VycmVudEhp
c3RvcnlJdGVtKQogewogICAgIFVJTlQgbWVudUlEID0gSURNX0hJU1RPUllfTElOSzAgKyBjdXJy
ZW50SGlzdG9yeUl0ZW07CiAKLSAgICBNRU5VSVRFTUlORk8gbWVudUl0ZW1JbmZvID0gezB9Owor
ICAgIE1FTlVJVEVNSU5GTyBtZW51SXRlbUluZm8gPSB7IDAgfTsKICAgICBtZW51SXRlbUluZm8u
Y2JTaXplID0gc2l6ZW9mKE1FTlVJVEVNSU5GTyk7CiAgICAgbWVudUl0ZW1JbmZvLmZNYXNrID0g
TUlJTV9UWVBFOwogICAgIG1lbnVJdGVtSW5mby5mVHlwZSA9IE1GVF9TVFJJTkc7CkBAIC0yMzks
OSArMTg5LDkgQEAgc3RhdGljIHZvaWQgdXBkYXRlTWVudUl0ZW1Gb3JIaXN0b3J5SXRlbQogICAg
IDo6RW5hYmxlTWVudUl0ZW0obWVudSwgbWVudUlELCBNRl9CWUNPTU1BTkQgfCBNRl9FTkFCTEVE
KTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd0xhc3RWaXNpdGVkU2l0ZXMoSVdlYlZpZXcmIHdlYlZp
ZXcpCit2b2lkIFdpbkxhdW5jaGVyOjpzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYgd2Vi
VmlldykKIHsKLSAgICBITUVOVSBtZW51ID0gOjpHZXRNZW51KGhNYWluV25kKTsKKyAgICBITUVO
VSBtZW51ID0gOjpHZXRNZW51KG1faE1haW5XbmQpOwogCiAgICAgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYkJhY2tGb3J3YXJkTGlzdCwgJl9fdXVpZG9mKElXZWJCYWNrRm9yd2FyZExpc3QpPj4g
YmFja0ZvcndhcmRMaXN0OwogICAgIEhSRVNVTFQgaHIgPSB3ZWJWaWV3LmJhY2tGb3J3YXJkTGlz
dCgmYmFja0ZvcndhcmRMaXN0LkdldEludGVyZmFjZVB0cigpKTsKQEAgLTI3NCwxMiArMjI0LDEy
IEBAIHN0YXRpYyB2b2lkIHNob3dMYXN0VmlzaXRlZFNpdGVzKElXZWJWaWUKICAgICBpZiAoRkFJ
TEVEKGhyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaHIgPSBnV2ViSGlzdG9yeS0+YWRkSXRl
bXMoMSwgJmN1cnJlbnRJdGVtLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBociA9IG1fd2ViSGlz
dG9yeS0+YWRkSXRlbXMoMSwgJmN1cnJlbnRJdGVtLkdldEludGVyZmFjZVB0cigpKTsKICAgICBp
ZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYkhpc3RvcnlQcml2YXRlLCAmX191dWlkb2YoSVdlYkhpc3RvcnlQcml2YXRlKT4+IHdl
Ykhpc3Rvcnk7Ci0gICAgaHIgPSBnV2ViSGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJI
aXN0b3J5UHJpdmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJIaXN0b3J5LkdldElu
dGVyZmFjZVB0cigpKSk7CisgICAgaHIgPSBtX3dlYkhpc3RvcnktPlF1ZXJ5SW50ZXJmYWNlKElJ
RF9JV2ViSGlzdG9yeVByaXZhdGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViSGlzdG9y
eS5HZXRJbnRlcmZhY2VQdHIoKSkpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTI4OCw3ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRl
cyhJV2ViVmllCiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGdI
aXN0b3J5SXRlbXMucmVzaXplKHRvdGFsTGlzdENvdW50KTsKKyAgICBtX2hpc3RvcnlJdGVtcy5y
ZXNpemUodG90YWxMaXN0Q291bnQpOwogCiAgICAgc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJdGVt
Kj4gaGlzdG9yeVRvTG9hZCh0b3RhbExpc3RDb3VudCk7CiAgICAgaHIgPSB3ZWJIaXN0b3J5LT5h
bGxJdGVtcygmdG90YWxMaXN0Q291bnQsIGhpc3RvcnlUb0xvYWQuZGF0YSgpKTsKQEAgLTI5Niw4
ICsyNDYsOCBAQCBzdGF0aWMgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmllCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3IgKGF1dG8gY3VyID0gaGlz
dG9yeVRvTG9hZC5iZWdpbigpOyBjdXIgIT0gaGlzdG9yeVRvTG9hZC5lbmQoKTsgKytjdXIpIHsK
LSAgICAgICAgZ0hpc3RvcnlJdGVtc1tpXS5BdHRhY2goKmN1cik7CisgICAgZm9yIChhdXRvJiBj
dXIgOiBoaXN0b3J5VG9Mb2FkKSB7CisgICAgICAgIG1faGlzdG9yeUl0ZW1zW2ldLkF0dGFjaChj
dXIpOwogICAgICAgICArK2k7CiAgICAgfQogCkBAIC0zMDcsNyArMjU3LDcgQEAgc3RhdGljIHZv
aWQgc2hvd0xhc3RWaXNpdGVkU2l0ZXMoSVdlYlZpZQogCiAgICAgaW50IGN1cnJlbnRIaXN0b3J5
SXRlbSA9IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbExpc3RDb3VudDsgKytpKSB7
Ci0gICAgICAgIHVwZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0obWVudSwgKihnSGlzdG9yeUl0
ZW1zW2FsbEl0ZW1zT2Zmc2V0ICsgY3VycmVudEhpc3RvcnlJdGVtXSksIGN1cnJlbnRIaXN0b3J5
SXRlbSk7CisgICAgICAgIHVwZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0obWVudSwgKihtX2hp
c3RvcnlJdGVtc1thbGxJdGVtc09mZnNldCArIGN1cnJlbnRIaXN0b3J5SXRlbV0pLCBjdXJyZW50
SGlzdG9yeUl0ZW0pOwogICAgICAgICArK2N1cnJlbnRIaXN0b3J5SXRlbTsKICAgICB9CiAKQEAg
LTMxNiw3MzcgKzI2Niw5NiBAQCBzdGF0aWMgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2Vi
VmllCiAgICAgICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfTElOSzAgKyBp
LCBNRl9CWUNPTU1BTkQgfCBNRl9ESVNBQkxFRCk7CiB9CiAKLXR5cGVkZWYgX2NvbV9wdHJfdDxf
Y29tX0lJSUQ8SURPTURvY3VtZW50LCAmX191dWlkb2YoSURPTURvY3VtZW50KT4+IElET01Eb2N1
bWVudFB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SURPTUVsZW1lbnQsICZfX3V1
aWRvZihJRE9NRWxlbWVudCk+PiBJRE9NRWxlbWVudFB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxf
Y29tX0lJSUQ8SURPTUV2ZW50VGFyZ2V0LCAmX191dWlkb2YoSURPTUV2ZW50VGFyZ2V0KT4+IElE
T01FdmVudFRhcmdldFB0cjsKLQotSFJFU1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZpbmlz
aExvYWRGb3JGcmFtZShJV2ViVmlldyogd2ViVmlldywgSVdlYkZyYW1lKiBmcmFtZSkKLXsKLSAg
ICBJRE9NRG9jdW1lbnRQdHIgZG9jOwotICAgIGZyYW1lLT5ET01Eb2N1bWVudCgmZG9jLkdldElu
dGVyZmFjZVB0cigpKTsKLQotICAgIElET01FbGVtZW50UHRyIGVsZW1lbnQ7Ci0gICAgSURPTUV2
ZW50VGFyZ2V0UHRyIHRhcmdldDsKLQotICAgIHNob3dMYXN0VmlzaXRlZFNpdGVzKCp3ZWJWaWV3
KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgZm9yIHRoZSB0ZXN0IHBhZ2U6Ci0gICAgSFJF
U1VMVCBociA9IGRvYy0+Z2V0RWxlbWVudEJ5SWQoTCJ3ZWJraXQgbG9nbyIsICZlbGVtZW50Lkdl
dEludGVyZmFjZVB0cigpKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKLQotICAgIGhyID0gZWxlbWVudC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lET01FdmVudFRh
cmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0YXJnZXQuR2V0SW50ZXJmYWNlUHRyKCkp
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhy
ID0gdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKEwiY2xpY2siLCBuZXcgU2ltcGxlRXZlbnRMaXN0
ZW5lciAoTCJ3ZWJraXQgbG9nbyBjbGljayIpLCBGQUxTRSk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICByZXR1cm4gaHI7Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlc2l6ZVN1YlZpZXdzKCkKK3ZvaWQgV2luTGF1bmNoZXI6OmxhdW5jaEluc3BlY3Rvcigp
CiB7Ci0gICAgaWYgKHVzZXNMYXllcmVkV2ViVmlldygpIHx8ICFnVmlld1dpbmRvdykKKyAgICBp
ZiAoIW1fd2ViVmlld1ByaXZhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJFQ1QgcmNDbGll
bnQ7Ci0gICAgR2V0Q2xpZW50UmVjdChoTWFpblduZCwgJnJjQ2xpZW50KTsKLSAgICBNb3ZlV2lu
ZG93KGhCYWNrQnV0dG9uV25kLCAwLCAwLCBDT05UUk9MQlVUVE9OX1dJRFRILCBVUkxCQVJfSEVJ
R0hULCBUUlVFKTsKLSAgICBNb3ZlV2luZG93KGhGb3J3YXJkQnV0dG9uV25kLCBDT05UUk9MQlVU
VE9OX1dJRFRILCAwLCBDT05UUk9MQlVUVE9OX1dJRFRILCBVUkxCQVJfSEVJR0hULCBUUlVFKTsK
LSAgICBNb3ZlV2luZG93KGhVUkxCYXJXbmQsIENPTlRST0xCVVRUT05fV0lEVEggKiAyLCAwLCBy
Y0NsaWVudC5yaWdodCwgVVJMQkFSX0hFSUdIVCwgVFJVRSk7Ci0gICAgTW92ZVdpbmRvdyhnVmll
d1dpbmRvdywgMCwgVVJMQkFSX0hFSUdIVCwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRv
bSAtIFVSTEJBUl9IRUlHSFQsIFRSVUUpOwotfQotCi1zdGF0aWMgdm9pZCBzdWJjbGFzc0Zvckxh
eWVyZWRXaW5kb3coKQotewotICAgIGhNYWluV25kID0gZ1ZpZXdXaW5kb3c7Ci0jaWYgZGVmaW5l
ZCBfTV9BTUQ2NCB8fCBkZWZpbmVkIF9XSU42NAotICAgIERlZldlYktpdFByb2MgPSByZWludGVy
cHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZ1B0cihoTWFpblduZCwgR1dMUF9XTkRQ
Uk9DKSk7Ci0gICAgOjpTZXRXaW5kb3dMb25nUHRyKGhNYWluV25kLCBHV0xQX1dORFBST0MsIHJl
aW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFduZFByb2MpKTsKLSNlbHNlCi0gICAgRGVmV2ViS2l0
UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oOjpHZXRXaW5kb3dMb25nKGhNYWluV25k
LCBHV0xfV05EUFJPQykpOwotICAgIDo6U2V0V2luZG93TG9uZyhoTWFpblduZCwgR1dMX1dORFBS
T0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KFduZFByb2MpKTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBjb21wdXRlRnVsbERlc2t0b3BGcmFtZSgpCi17Ci0gICAgUkVDVCBkZXNrdG9w
OwotICAgIGlmICghOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VUV09SS0FSRUEsIDAsIHN0
YXRpY19jYXN0PHZvaWQqPigmZGVza3RvcCksIDApKQorICAgIGlmICghU1VDQ0VFREVEKG1fd2Vi
Vmlld1ByaXZhdGUtPmluc3BlY3RvcigmbV9pbnNwZWN0b3IuR2V0SW50ZXJmYWNlUHRyKCkpKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc193aW5kb3dQb3NpdGlvbi54ID0gMDsKLSAgICBzX3dp
bmRvd1Bvc2l0aW9uLnkgPSAwOwotICAgIHNfd2luZG93U2l6ZS5jeCA9IGRlc2t0b3AucmlnaHQg
LSBkZXNrdG9wLmxlZnQ7Ci0gICAgc193aW5kb3dTaXplLmN5ID0gZGVza3RvcC5ib3R0b20gLSBk
ZXNrdG9wLnRvcDsKKyAgICBtX2luc3BlY3Rvci0+c2hvdygpOwogfQogCi1CT09MIFdJTkFQSSBE
bGxNYWluKEhJTlNUQU5DRSBkbGxJbnN0YW5jZSwgRFdPUkQgcmVhc29uLCBMUFZPSUQpCit2b2lk
IFdpbkxhdW5jaGVyOjpuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKEhXTkQgaFduZCwgVUlOVCBt
ZW51SUQpCiB7Ci0gICAgaWYgKHJlYXNvbiA9PSBETExfUFJPQ0VTU19BVFRBQ0gpCi0gICAgICAg
IGhJbnN0ID0gZGxsSW5zdGFuY2U7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGJv
b2wgZ2V0QXBwRGF0YUZvbGRlcihfYnN0cl90JiBkaXJlY3RvcnkpCi17Ci0gICAgd2NoYXJfdCBh
cHBEYXRhRGlyZWN0b3J5W01BWF9QQVRIXTsKLSAgICBpZiAoRkFJTEVEKFNIR2V0Rm9sZGVyUGF0
aFcoMCwgQ1NJRExfTE9DQUxfQVBQREFUQSB8IENTSURMX0ZMQUdfQ1JFQVRFLCAwLCAwLCBhcHBE
YXRhRGlyZWN0b3J5KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHdjaGFyX3QgZXhl
Y3V0YWJsZVBhdGhbTUFYX1BBVEhdOwotICAgIDo6R2V0TW9kdWxlRmlsZU5hbWVXKDAsIGV4ZWN1
dGFibGVQYXRoLCBNQVhfUEFUSCk7Ci0gICAgOjpQYXRoUmVtb3ZlRXh0ZW5zaW9uVyhleGVjdXRh
YmxlUGF0aCk7Ci0KLSAgICBkaXJlY3RvcnkgPSBfYnN0cl90KGFwcERhdGFEaXJlY3RvcnkpICsg
TCJcXCIgKyA6OlBhdGhGaW5kRmlsZU5hbWVXKGV4ZWN1dGFibGVQYXRoKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpCi17Ci0g
ICAgSFJFU1VMVCBociA9IGdTdGFuZGFyZFByZWZlcmVuY2VzLT5RdWVyeUludGVyZmFjZShJSURf
SVdlYlByZWZlcmVuY2VzUHJpdmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZnUHJlZnNQ
cml2YXRlLkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgZ1N0YW5kYXJkUHJlZmVyZW5j
ZXMtPnNldEFWRm91bmRhdGlvbkVuYWJsZWQoVFJVRSk7Ci0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoVFJVRSk7Ci0jZW5kaWYKLQotICAgIGdQcmVm
c1ByaXZhdGUtPnNldEZ1bGxTY3JlZW5FbmFibGVkKFRSVUUpOwotICAgIGdQcmVmc1ByaXZhdGUt
PnNldFNob3dEZWJ1Z0JvcmRlcnMoRkFMU0UpOwotICAgIGdQcmVmc1ByaXZhdGUtPnNldFNob3dS
ZXBhaW50Q291bnRlcihGQUxTRSk7Ci0KLSAgICBnU3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0TG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFRSVUUpOwotICAgIGdQcmVmc1ByaXZhdGUtPnNldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKFRSVUUpOwotICAgIGdTdGFuZGFyZFByZWZlcmVuY2VzLT5z
ZXRKYXZhU2NyaXB0RW5hYmxlZChUUlVFKTsKLSAgICBnUHJlZnNQcml2YXRlLT5zZXRBbGxvd1Vu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhGQUxTRSk7Ci0gICAgZ1ByZWZzUHJpdmF0ZS0+c2V0
QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKFRSVUUpOwotCi0gICAgZ1ByZWZzUHJpdmF0ZS0+
c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChUUlVFKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1zdGF0aWMgYm9vbCBzZXRDYWNoZUZvbGRlcigpCi17Ci0gICAgSVdlYkNhY2hlUHRyIHdlYkNh
Y2hlOwotCi0gICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkNh
Y2hlLCAwLCBfX3V1aWRvZih3ZWJDYWNoZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2Vi
Q2FjaGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgX2JzdHJfdCBhcHBEYXRhRm9sZGVyOwotICAgIGlmICghZ2V0
QXBwRGF0YUZvbGRlcihhcHBEYXRhRm9sZGVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXBwRGF0YUZvbGRlciArPSBMIlxcY2FjaGUiOwotICAgIHdlYkNhY2hlLT5zZXRDYWNoZUZv
bGRlcihhcHBEYXRhRm9sZGVyKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGNyZWF0
ZUNyYXNoUmVwb3J0KEVYQ0VQVElPTl9QT0lOVEVSUyogZXhjZXB0aW9uUG9pbnRlcnMpCi17Ci0g
ICAgX2JzdHJfdCBkaXJlY3Rvcnk7Ci0KLSAgICBpZiAoIWdldEFwcERhdGFGb2xkZXIoZGlyZWN0
b3J5KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKDo6U0hDcmVhdGVEaXJlY3RvcnlFeCgw
LCBkaXJlY3RvcnksIDApICE9IEVSUk9SX1NVQ0NFU1MKLSAgICAgICAgJiYgOjpHZXRMYXN0RXJy
b3IoKSAhPSBFUlJPUl9GSUxFX0VYSVNUUwotICAgICAgICAmJiA6OkdldExhc3RFcnJvcigpICE9
IEVSUk9SX0FMUkVBRFlfRVhJU1RTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OndzdHJp
bmcgZmlsZU5hbWUgPSBkaXJlY3RvcnkgKyBMIlxcQ3Jhc2hSZXBvcnQuZG1wIjsKLSAgICBIQU5E
TEUgbWluaUR1bXBGaWxlID0gOjpDcmVhdGVGaWxlKGZpbGVOYW1lLmNfc3RyKCksIEdFTkVSSUNf
V1JJVEUsIDAsIDAsIENSRUFURV9BTFdBWVMsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7Ci0K
LSAgICBpZiAobWluaUR1bXBGaWxlICYmIG1pbmlEdW1wRmlsZSAhPSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkgewotCi0gICAgICAgIE1JTklEVU1QX0VYQ0VQVElPTl9JTkZPUk1BVElPTiBtZGVpOwot
ICAgICAgICBtZGVpLlRocmVhZElkID0gOjpHZXRDdXJyZW50VGhyZWFkSWQoKTsKLSAgICAgICAg
bWRlaS5FeGNlcHRpb25Qb2ludGVycyAgPSBleGNlcHRpb25Qb2ludGVyczsKLSAgICAgICAgbWRl
aS5DbGllbnRQb2ludGVycyA9IDA7Ci0KLSNpZmRlZiBfREVCVUcKLSAgICAgICAgTUlOSURVTVBf
VFlQRSBkdW1wVHlwZSA9IE1pbmlEdW1wV2l0aEZ1bGxNZW1vcnk7Ci0jZWxzZQotICAgICAgICBN
SU5JRFVNUF9UWVBFIGR1bXBUeXBlID0gTWluaUR1bXBOb3JtYWw7Ci0jZW5kaWYKLQotICAgICAg
ICA6Ok1pbmlEdW1wV3JpdGVEdW1wKDo6R2V0Q3VycmVudFByb2Nlc3MoKSwgOjpHZXRDdXJyZW50
UHJvY2Vzc0lkKCksIG1pbmlEdW1wRmlsZSwgZHVtcFR5cGUsICZtZGVpLCAwLCAwKTsKLSAgICAg
ICAgOjpDbG9zZUhhbmRsZShtaW5pRHVtcEZpbGUpOwotICAgICAgICBwcm9jZXNzQ3Jhc2hSZXBv
cnQoZmlsZU5hbWUuY19zdHIoKSk7Ci0gICAgfQotfQotCi1pbnQgV0lOQVBJIHdXaW5NYWluKEhJ
TlNUQU5DRSwgSElOU1RBTkNFLCBQV1NUUiwgaW50IG5DbWRTaG93KQotewotI2lmZGVmIF9DUlRE
QkdfTUFQX0FMTE9DCi0gICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJ
TEVfU1RERVJSKTsKLSAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9E
RV9GSUxFKTsKLSNlbmRpZgotCi0gICAgIC8vIFRPRE86IFBsYWNlIGNvZGUgaGVyZS4KLSAgICBN
U0cgbXNnID0gezB9OwotICAgIEhBQ0NFTCBoQWNjZWxUYWJsZTsKLQotICAgIElOSVRDT01NT05D
T05UUk9MU0VYIEluaXRDdHJsRXg7Ci0KLSAgICBJbml0Q3RybEV4LmR3U2l6ZSA9IHNpemVvZihJ
TklUQ09NTU9OQ09OVFJPTFNFWCk7Ci0gICAgSW5pdEN0cmxFeC5kd0lDQyAgPSAweDAwMDA0MDAw
OyAvL0lDQ19TVEFOREFSRF9DTEFTU0VTOwotICAgIEluaXRDb21tb25Db250cm9sc0V4KCZJbml0
Q3RybEV4KTsKLQotICAgIF9ic3RyX3QgcmVxdWVzdGVkVVJMOwotICAgIGludCBhcmdjID0gMDsK
LSAgICBXQ0hBUioqIGFyZ3YgPSBDb21tYW5kTGluZVRvQXJndlcoR2V0Q29tbWFuZExpbmVXKCks
ICZhcmdjKTsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewotICAgICAgICBp
ZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXRyYW5zcGFyZW50IikpCi0gICAgICAgICAgICBzX3Vz
ZXNMYXllcmVkV2ViVmlldyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCF3Y3NpY21wKGFyZ3Zb
aV0sIEwiLS1kZXNrdG9wIikpCi0gICAgICAgICAgICBzX2Z1bGxEZXNrdG9wID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZSBpZiAoIXJlcXVlc3RlZFVSTCkKLSAgICAgICAgICAgIHJlcXVlc3RlZFVSTCA9
IGFyZ3ZbaV07Ci0gICAgfQotCi0gICAgLy8gSW5pdGlhbGl6ZSBnbG9iYWwgc3RyaW5ncwotICAg
IExvYWRTdHJpbmcoaEluc3QsIElEU19BUFBfVElUTEUsIHN6VGl0bGUsIE1BWF9MT0FEU1RSSU5H
KTsKLSAgICBMb2FkU3RyaW5nKGhJbnN0LCBJRENfV0lOTEFVTkNIRVIsIHN6V2luZG93Q2xhc3Ms
IE1BWF9MT0FEU1RSSU5HKTsKLSAgICBNeVJlZ2lzdGVyQ2xhc3MoaEluc3QpOwotCi0gICAgaWYg
KHNob3VsZFVzZUZ1bGxEZXNrdG9wKCkpCi0gICAgICAgIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1l
KCk7Ci0KLSAgICAvLyBJbml0IENPTQotICAgIE9sZUluaXRpYWxpemUoTlVMTCk7Ci0KLSAgICBp
ZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpIHsKLSAgICAgICAgaFVSTEJhclduZCA9IENyZWF0ZVdp
bmRvdyhMIkVESVQiLCBMIlR5cGUgVVJMIEhlcmUiLAotICAgICAgICAgICAgICAgICAgICBXU19P
VkVSTEFQUEVEV0lORE9XIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19B
VVRPVlNDUk9MTCwgCi0gICAgICAgICAgICAgICAgICAgIHNfd2luZG93UG9zaXRpb24ueCwgc193
aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5LCBzX3dpbmRvd1NpemUuY3gsIFVSTEJB
Ul9IRUlHSFQsCi0gICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgIDAs
Ci0gICAgICAgICAgICAgICAgICAgIGhJbnN0LCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBo
TWFpblduZCA9IENyZWF0ZVdpbmRvdyhzeldpbmRvd0NsYXNzLCBzelRpdGxlLCBXU19PVkVSTEFQ
UEVEV0lORE9XLAotICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCAwLCBDV19V
U0VERUZBVUxULCAwLCAwLCAwLCBoSW5zdCwgMCk7Ci0KLSAgICAgICAgaWYgKCFoTWFpblduZCkK
LSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgICAgICBoQmFja0J1dHRvblduZCA9IENy
ZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPCIsIFdTX0NISUxEIHwgV1NfVklTSUJMRSAgfCBCU19U
RVhULCAwLCAwLCAwLCAwLCBoTWFpblduZCwgMCwgaEluc3QsIDApOwotICAgICAgICBoRm9yd2Fy
ZEJ1dHRvblduZCA9IENyZWF0ZVdpbmRvdyhMIkJVVFRPTiIsIEwiPiIsIFdTX0NISUxEIHwgV1Nf
VklTSUJMRSAgfCBCU19URVhULCBDT05UUk9MQlVUVE9OX1dJRFRILCAwLCAwLCAwLCBoTWFpbldu
ZCwgMCwgaEluc3QsIDApOwotICAgICAgICBoVVJMQmFyV25kID0gQ3JlYXRlV2luZG93KEwiRURJ
VCIsIDAsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0JPUkRFUiB8IEVTX0xFRlQgfCBFU19B
VVRPVlNDUk9MTCwgQ09OVFJPTEJVVFRPTl9XSURUSCAqIDIsIDAsIDAsIDAsIGhNYWluV25kLCAw
LCBoSW5zdCwgMCk7Ci0KLSAgICAgICAgU2hvd1dpbmRvdyhoTWFpblduZCwgbkNtZFNob3cpOwot
ICAgICAgICBVcGRhdGVXaW5kb3coaE1haW5XbmQpOwotICAgIH0KLQotICAgIERlZkVkaXRQcm9j
ID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRXaW5kb3dMb25nUHRyKGhVUkxCYXJXbmQs
IEdXTFBfV05EUFJPQykpOwotICAgIERlZkJ1dHRvblByb2MgPSByZWludGVycHJldF9jYXN0PFdO
RFBST0M+KEdldFdpbmRvd0xvbmdQdHIoaEJhY2tCdXR0b25XbmQsIEdXTFBfV05EUFJPQykpOwot
ICAgIFNldFdpbmRvd0xvbmdQdHIoaFVSTEJhclduZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJl
dF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykpOwotICAgIFNldFdpbmRvd0xvbmdQdHIoaEJhY2tC
dXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4oQmFja0J1
dHRvblByb2MpKTsKLSAgICBTZXRXaW5kb3dMb25nUHRyKGhGb3J3YXJkQnV0dG9uV25kLCBHV0xQ
X1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEZvcndhcmRCdXR0b25Qcm9jKSk7
Ci0KLSAgICBTZXRGb2N1cyhoVVJMQmFyV25kKTsKLQotICAgIFJFQ1QgY2xpZW50UmVjdCA9IHsg
c193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24u
eCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5
IH07Ci0KLSAgICBJV2ViUHJlZmVyZW5jZXNQdHIgdG1wUHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZB
SUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJQcmVmZXJlbmNlcywgMCwgSUlEX0lX
ZWJQcmVmZXJlbmNlcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0bXBQcmVmZXJlbmNlcy5H
ZXRJbnRlcmZhY2VQdHIoKSkpKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaWYgKEZBSUxF
RCh0bXBQcmVmZXJlbmNlcy0+c3RhbmRhcmRQcmVmZXJlbmNlcygmZ1N0YW5kYXJkUHJlZmVyZW5j
ZXMuR2V0SW50ZXJmYWNlUHRyKCkpKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgaWYgKCFz
ZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBIUkVT
VUxUIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJW
aWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdXZWJWaWV3LkdldEludGVyZmFjZVB0cigp
KSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0g
Z1dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViVmlld1ByaXZhdGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmZ1dlYlZpZXdQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAg
aWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGhyID0gV2ViS2l0Q3Jl
YXRlSW5zdGFuY2UoQ0xTSURfV2ViSGlzdG9yeSwgMCwgX191dWlkb2YoZ1dlYkhpc3RvcnkpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmdXZWJIaXN0b3J5LkdldEludGVyZmFjZVB0cigpKSk7
Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGlmICghc2V0
Q2FjaGVGb2xkZXIoKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgZ1dlYkhvc3QgPSBuZXcg
V2luTGF1bmNoZXJXZWJIb3N0KCk7Ci0gICAgZ1dlYkhvc3QtPkFkZFJlZigpOwotICAgIGhyID0g
Z1dlYlZpZXctPnNldEZyYW1lTG9hZERlbGVnYXRlKGdXZWJIb3N0KTsKLSAgICBpZiAoRkFJTEVE
KGhyKSkKLSAgICAgICAgZ290byBleGl0OwotCi0gICAgZ1ByaW50RGVsZWdhdGUgPSBuZXcgUHJp
bnRXZWJVSURlbGVnYXRlOwotICAgIGdQcmludERlbGVnYXRlLT5BZGRSZWYoKTsKLSAgICBociA9
IGdXZWJWaWV3LT5zZXRVSURlbGVnYXRlKGdQcmludERlbGVnYXRlKTsKLSAgICBpZiAoRkFJTEVE
IChocikpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGdBY2Nlc3NpYmlsaXR5RGVsZWdhdGUg
PSBuZXcgQWNjZXNzaWJpbGl0eURlbGVnYXRlOwotICAgIGdBY2Nlc3NpYmlsaXR5RGVsZWdhdGUt
PkFkZFJlZigpOwotICAgIGhyID0gZ1dlYlZpZXctPnNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShn
QWNjZXNzaWJpbGl0eURlbGVnYXRlKTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIGdv
dG8gZXhpdDsKLQotICAgIGhyID0gZ1dlYlZpZXctPnNldEhvc3RXaW5kb3cocmVpbnRlcnByZXRf
Y2FzdDxPTEVfSEFORExFPihoTWFpblduZCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICBnb3RvIGV4aXQ7Ci0KLSAgICBociA9IGdXZWJWaWV3LT5pbml0V2l0aEZyYW1lKGNsaWVudFJl
Y3QsIDAsIDApOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAg
ICBpZiAoIXJlcXVlc3RlZFVSTCkgewotICAgICAgICBJV2ViRnJhbWVQdHIgZnJhbWU7Ci0gICAg
ICAgIGhyID0gZ1dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOwot
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAg
ICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoX2JzdHJfdChkZWZhdWx0SFRNTCkuR2V0QlNUUigpLCAw
KTsKLSAgICB9Ci0KLSAgICBociA9IGdXZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQodXNl
c0xheWVyZWRXZWJWaWV3KCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBociA9IGdXZWJWaWV3UHJpdmF0ZS0+c2V0VXNlc0xheWVyZWRXaW5kb3codXNl
c0xheWVyZWRXZWJWaWV3KCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBnb3RvIGV4
aXQ7Ci0KLSAgICBociA9IGdXZWJWaWV3UHJpdmF0ZS0+dmlld1dpbmRvdyhyZWludGVycHJldF9j
YXN0PE9MRV9IQU5ETEUqPigmZ1ZpZXdXaW5kb3cpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSB8fCAh
Z1ZpZXdXaW5kb3cpCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgIGlmICh1c2VzTGF5ZXJlZFdl
YlZpZXcoKSkKLSAgICAgICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7Ci0KLSAgICByZXNp
emVTdWJWaWV3cygpOwotCi0gICAgU2hvd1dpbmRvdyhnVmlld1dpbmRvdywgbkNtZFNob3cpOwot
ICAgIFVwZGF0ZVdpbmRvdyhnVmlld1dpbmRvdyk7Ci0KLSAgICBoQWNjZWxUYWJsZSA9IExvYWRB
Y2NlbGVyYXRvcnMoaEluc3QsIE1BS0VJTlRSRVNPVVJDRShJRENfV0lOTEFVTkNIRVIpKTsKLQot
ICAgIGlmIChyZXF1ZXN0ZWRVUkwubGVuZ3RoKCkpCi0gICAgICAgIGxvYWRVUkwocmVxdWVzdGVk
VVJMLkdldEJTVFIoKSk7Ci0KLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MDkpCi0KLSAgICAv
LyBNYWluIG1lc3NhZ2UgbG9vcDoKLSAgICBfX3RyeSB7Ci0gICAgICAgIHdoaWxlIChHZXRNZXNz
YWdlKCZtc2csIDAsIDAsIDApKSB7Ci0jaWYgVVNFKENGKQotICAgICAgICAgICAgQ0ZSdW5Mb29w
UnVuSW5Nb2RlKGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSwgMCwgdHJ1ZSk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIGlmICghVHJhbnNsYXRlQWNjZWxlcmF0b3IobXNnLmh3bmQsIGhBY2NlbFRhYmxlLCAm
bXNnKSkgewotICAgICAgICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7Ci0gICAgICAg
ICAgICAgICAgRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOwotICAgICAgICAgICAgfQotI2lmIFVTRShH
TElCKQotICAgICAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAsIGZhbHNlKTsKLSNl
bmRpZgotICAgICAgICB9Ci0gICAgfSBfX2V4Y2VwdChjcmVhdGVDcmFzaFJlcG9ydChHZXRFeGNl
cHRpb25JbmZvcm1hdGlvbigpKSwgRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB9Ci0KLWV4
aXQ6Ci0gICAgZ1ByaW50RGVsZWdhdGUtPlJlbGVhc2UoKTsKLQotICAgIHNodXREb3duV2ViS2l0
KCk7Ci0jaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKLSAgICBfQ3J0RHVtcE1lbW9yeUxlYWtzKCk7
Ci0jZW5kaWYKLQotICAgIC8vIFNodXQgZG93biBDT00uCi0gICAgT2xlVW5pbml0aWFsaXplKCk7
Ci0gICAgCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obXNnLndQYXJhbSk7Ci19Ci0KLUFU
T00gTXlSZWdpc3RlckNsYXNzKEhJTlNUQU5DRSBoSW5zdGFuY2UpCi17Ci0gICAgV05EQ0xBU1NF
WCB3Y2V4OwotCi0gICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7Ci0KLSAgICB3
Y2V4LnN0eWxlICAgICAgICAgID0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7Ci0gICAgd2NleC5s
cGZuV25kUHJvYyAgICA9IFduZFByb2M7Ci0gICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7Ci0g
ICAgd2NleC5jYlduZEV4dHJhICAgICA9IDA7Ci0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJ
bnN0YW5jZTsKLSAgICB3Y2V4LmhJY29uICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBN
QUtFSU5UUkVTT1VSQ0UoSURJX1dJTkxBVU5DSEVSKSk7Ci0gICAgd2NleC5oQ3Vyc29yICAgICAg
ICA9IExvYWRDdXJzb3IoTlVMTCwgSURDX0FSUk9XKTsKLSAgICB3Y2V4LmhickJhY2tncm91bmQg
ID0gMDsKLSAgICB3Y2V4Lmxwc3pNZW51TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19XSU5M
QVVOQ0hFUik7Ci0gICAgd2NleC5scHN6Q2xhc3NOYW1lICA9IHN6V2luZG93Q2xhc3M7Ci0gICAg
d2NleC5oSWNvblNtICAgICAgICA9IExvYWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVT
T1VSQ0UoSURJX1NNQUxMKSk7Ci0KLSAgICByZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsK
LX0KLQotc3RhdGljIEJPT0wgQ0FMTEJBQ0sgQWJvcnRQcm9jKEhEQyBoREMsIGludCBFcnJvcikK
LXsKLSAgICBNU0cgbXNnOwotICAgIHdoaWxlICg6OlBlZWtNZXNzYWdlKCZtc2csIDAsIDAsIDAs
IFBNX1JFTU9WRSkpIHsKLSAgICAgICAgOjpUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwotICAgICAg
ICA6OkRpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0K
LQotc3RhdGljIEhEQyBnZXRQcmludGVyREMoKQotewotICAgIFBSSU5URExHIHBkbGc7Ci0gICAg
bWVtc2V0KCZwZGxnLCAwLCBzaXplb2YoUFJJTlRETEcpKTsKLSAgICBwZGxnLmxTdHJ1Y3RTaXpl
ID0gc2l6ZW9mKFBSSU5URExHKTsKLSAgICBwZGxnLkZsYWdzID0gUERfUFJJTlRTRVRVUCB8IFBE
X1JFVFVSTkRDOwotCi0gICAgOjpQcmludERsZygmcGRsZyk7Ci0KLSAgICByZXR1cm4gcGRsZy5o
REM7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXREb2NTdHJ1Y3QoRE9DSU5GTyogZGksIFRDSEFSKiBk
b2NuYW1lKQotewotICAgIG1lbXNldChkaSwgMCwgc2l6ZW9mKERPQ0lORk8pKTsKLSAgICBkaS0+
Y2JTaXplID0gc2l6ZW9mKERPQ0lORk8pOwotICAgIGRpLT5scHN6RG9jTmFtZSA9IGRvY25hbWU7
Ci19Ci0KLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1lUHJpdmF0ZSwgJl9f
dXVpZG9mKElXZWJGcmFtZVByaXZhdGUpPj4gSVdlYkZyYW1lUHJpdmF0ZVB0cjsKLQotdm9pZCBQ
cmludFZpZXcoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0pCi17Ci0gICAgSERDIHByaW50REMgPSBnZXRQcmludGVyREMoKTsKLSAgICBpZiAoIXBy
aW50REMpIHsKLSAgICAgICAgOjpNZXNzYWdlQm94VygwLCBMIkVycm9yIGNyZWF0aW5nIHByaW50
aW5nIERDIiwgTCJFcnJvciIsIE1CX0FQUExNT0RBTCB8IE1CX09LKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICg6OlNldEFib3J0UHJvYyhwcmludERDLCBBYm9ydFByb2MpID09
IFNQX0VSUk9SKSB7Ci0gICAgICAgIDo6TWVzc2FnZUJveFcoMCwgTCJFcnJvciBzZXR0aW5nIHVw
IEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBJV2ViRnJhbWVQdHIgZnJhbWU7Ci0gICAgSVdlYkZyYW1lUHJp
dmF0ZVB0ciBmcmFtZVByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRChnV2ViVmlldy0+bWFpbkZyYW1l
KCZmcmFtZS5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
RkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgmZnJhbWVQcml2YXRlLkdldEludGVyZmFjZVB0
cigpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGlu
Z01vZGUoVFJVRSwgcHJpbnREQyk7Ci0KLSAgICBVSU5UIHBhZ2VDb3VudCA9IDA7Ci0gICAgZnJh
bWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50KHByaW50REMsICZwYWdlQ291bnQpOwotCi0g
ICAgRE9DSU5GTyBkaTsKLSAgICBpbml0RG9jU3RydWN0KCZkaSwgTCJXZWJLaXQgRG9jIik7Ci0g
ICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOwotCi0gICAgLy8gRklYTUU6IE5lZWQgQ29yZUdy
YXBoaWNzIGltcGxlbWVudGF0aW9uCi0gICAgdm9pZCogZ3JhcGhpY3NDb250ZXh0ID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8PSBwYWdlQ291bnQ7ICsrcGFnZSkgewotICAg
ICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKLSAgICAgICAgZnJhbWVQcml2YXRlLT5zcG9vbFBh
Z2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAgIDo6RW5k
UGFnZShwcmludERDKTsKLSAgICB9Ci0KLSAgICBmcmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdN
b2RlKEZBTFNFLCBwcmludERDKTsKLQotICAgIDo6RW5kRG9jKHByaW50REMpOwotICAgIDo6RGVs
ZXRlREMocHJpbnREQyk7Ci19Ci0KLXN0YXRpYyB2b2lkIFRvZ2dsZU1lbnVJdGVtKEhXTkQgaFdu
ZCwgVUlOVCBtZW51SUQpCi17Ci0gICAgSE1FTlUgbWVudSA9IDo6R2V0TWVudShoV25kKTsKLQot
ICAgIE1FTlVJVEVNSU5GTyBpbmZvOwotICAgIDo6bWVtc2V0KCZpbmZvLCAweDAwLCBzaXplb2Yo
aW5mbykpOwotICAgIGluZm8uY2JTaXplID0gc2l6ZW9mKGluZm8pOwotICAgIGluZm8uZk1hc2sg
PSBNSUlNX1NUQVRFOwotCi0gICAgaWYgKCE6OkdldE1lbnVJdGVtSW5mbyhtZW51LCBtZW51SUQs
IEZBTFNFLCAmaW5mbykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJPT0wgbmV3U3RhdGUgPSAh
KGluZm8uZlN0YXRlICYgTUZTX0NIRUNLRUQpOwotCi0gICAgaWYgKCFnU3RhbmRhcmRQcmVmZXJl
bmNlcyB8fCAhZ1ByZWZzUHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoICht
ZW51SUQpIHsKLSAgICBjYXNlIElETV9BVkZPVU5EQVRJT046Ci0gICAgICAgIGdTdGFuZGFyZFBy
ZWZlcmVuY2VzLT5zZXRBVkZvdW5kYXRpb25FbmFibGVkKG5ld1N0YXRlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJRE1fQUNDX0NPTVBPU0lUSU5HOgotICAgICAgICBnUHJlZnNQcml2YXRl
LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChuZXdTdGF0ZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46Ci0gICAgICAgIGdQcmVmc1ByaXZhdGUt
PnNldEZ1bGxTY3JlZW5FbmFibGVkKG5ld1N0YXRlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRE1fQ09NUE9TSVRJTkdfQk9SREVSUzoKLSAgICAgICAgZ1ByZWZzUHJpdmF0ZS0+c2V0U2hv
d0RlYnVnQm9yZGVycyhuZXdTdGF0ZSk7Ci0gICAgICAgIGdQcmVmc1ByaXZhdGUtPnNldFNob3dS
ZXBhaW50Q291bnRlcihuZXdTdGF0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJ
U0FCTEVfSU1BR0VTOgotICAgICAgICBnU3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFn
ZXNBdXRvbWF0aWNhbGx5KCFuZXdTdGF0ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURN
X0RJU0FCTEVfU1RZTEVTOgotICAgICAgICBnUHJlZnNQcml2YXRlLT5zZXRBdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZCghbmV3U3RhdGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9E
SVNBQkxFX0pBVkFTQ1JJUFQ6Ci0gICAgICAgIGdTdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZCghbmV3U3RhdGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9E
SVNBQkxFX0xPQ0FMX0ZJTEVfUkVTVFJJQ1RJT05TOgotICAgICAgICBnUHJlZnNQcml2YXRlLT5z
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhuZXdTdGF0ZSk7Ci0gICAgICAgIGdQ
cmVmc1ByaXZhdGUtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhuZXdTdGF0ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGluZm8uZlN0YXRlID0gKG5ld1N0YXRlKSA/IE1G
U19DSEVDS0VEIDogTUZTX1VOQ0hFQ0tFRDsKLQotICAgIDo6U2V0TWVudUl0ZW1JbmZvKG1lbnUs
IG1lbnVJRCwgRkFMU0UsICZpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgTGF1bmNoSW5zcGVjdG9y
KEhXTkQgaHduZCkKLXsKLSAgICBpZiAoIWdXZWJWaWV3UHJpdmF0ZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFTVUNDRUVERUQoZ1dlYlZpZXdQcml2YXRlLT5pbnNwZWN0b3IoJmdJbnNw
ZWN0b3IuR2V0SW50ZXJmYWNlUHRyKCkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ0luc3Bl
Y3Rvci0+c2hvdygpOwotfQotCi1zdGF0aWMgdm9pZCBOYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJk
KEhXTkQgaFduZCwgVUlOVCBtZW51SUQpCi17Ci0gICAgaWYgKCFnV2ViVmlldykKKyAgICBpZiAo
IW1fd2ViVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCB3ZW50QmFja09yRm9yd2Fy
ZCA9IEZBTFNFOwogICAgIGlmIChJRE1fSElTVE9SWV9GT1JXQVJEID09IG1lbnVJRCkKLSAgICAg
ICAgZ1dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEJhY2tPckZvcndhcmQpOworICAgICAgICBtX3dl
YlZpZXctPmdvRm9yd2FyZCgmd2VudEJhY2tPckZvcndhcmQpOwogICAgIGVsc2UKLSAgICAgICAg
Z1dlYlZpZXctPmdvQmFjaygmd2VudEJhY2tPckZvcndhcmQpOworICAgICAgICBtX3dlYlZpZXct
PmdvQmFjaygmd2VudEJhY2tPckZvcndhcmQpOwogfQogCi1zdGF0aWMgdm9pZCBOYXZpZ2F0ZVRv
SGlzdG9yeShIV05EIGhXbmQsIFVJTlQgbWVudUlEKQordm9pZCBXaW5MYXVuY2hlcjo6bmF2aWdh
dGVUb0hpc3RvcnkoSFdORCBoV25kLCBVSU5UIG1lbnVJRCkKIHsKLSAgICBpZiAoIWdXZWJWaWV3
KQorICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgaGlzdG9y
eUVudHJ5ID0gbWVudUlEIC0gSURNX0hJU1RPUllfTElOSzA7Ci0gICAgaWYgKGhpc3RvcnlFbnRy
eSA+IGdIaXN0b3J5SXRlbXMuc2l6ZSgpKQorICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hpc3Rv
cnlJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIElXZWJIaXN0b3J5SXRlbVB0
ciBkZXNpcmVkSGlzdG9yeUl0ZW0gPSBnSGlzdG9yeUl0ZW1zW2hpc3RvcnlFbnRyeV07CisgICAg
SVdlYkhpc3RvcnlJdGVtUHRyIGRlc2lyZWRIaXN0b3J5SXRlbSA9IG1faGlzdG9yeUl0ZW1zW2hp
c3RvcnlFbnRyeV07CiAgICAgaWYgKCFkZXNpcmVkSGlzdG9yeUl0ZW0pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEJPT0wgc3VjY2VlZGVkID0gRkFMU0U7Ci0gICAgZ1dlYlZpZXctPmdvVG9CYWNr
Rm9yd2FyZEl0ZW0oZGVzaXJlZEhpc3RvcnlJdGVtLCAmc3VjY2VlZGVkKTsKKyAgICBtX3dlYlZp
ZXctPmdvVG9CYWNrRm9yd2FyZEl0ZW0oZGVzaXJlZEhpc3RvcnlJdGVtLCAmc3VjY2VlZGVkKTsK
IAogICAgIF9ic3RyX3QgZnJhbWVVUkw7CiAgICAgZGVzaXJlZEhpc3RvcnlJdGVtLT5VUkxTdHJp
bmcoZnJhbWVVUkwuR2V0QWRkcmVzcygpKTsKIAotICAgIDo6U2VuZE1lc3NhZ2UoaFVSTEJhcldu
ZCwgKFVJTlQpV01fU0VUVEVYVCwgMCwgKExQQVJBTSlmcmFtZVVSTC5HZXRCU1RSKCkpOworICAg
IDo6U2VuZE1lc3NhZ2UobV9oVVJMQmFyV25kLCAoVUlOVClXTV9TRVRURVhULCAwLCAoTFBBUkFN
KWZyYW1lVVJMLkdldEJTVFIoKSk7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgZHJhZ0JhckhlaWdo
dCA9IDMwOwotCi1MUkVTVUxUIENBTExCQUNLIFduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAgV05EUFJPQyBwYXJlbnRQ
cm9jID0gdXNlc0xheWVyZWRXZWJWaWV3KCkgPyBEZWZXZWJLaXRQcm9jIDogRGVmV2luZG93UHJv
YzsKLQotICAgIHN3aXRjaCAobWVzc2FnZSkgewotICAgIGNhc2UgV01fTkNISVRURVNUOgotICAg
ICAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpIHsKLSAgICAgICAgICAgIFJFQ1Qgd2luZG93
OwotICAgICAgICAgICAgOjpHZXRXaW5kb3dSZWN0KGhXbmQsICZ3aW5kb3cpOwotICAgICAgICAg
ICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lv
biB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCi0gICAgICAgICAgICAvLyBkcmFnZ2luZy4gVGhlIHJp
Z2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3ZWIgdmlldyB0byBzZWUg
d2hhdCdzCi0gICAgICAgICAgICAvLyB1bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0
aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNlIGFuIGFyYml0cmFyeQotICAgICAgICAgICAgLy8gMzAg
cGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFyYml0cmFyeSBncmlwcGlu
ZyBsb2NhdGlvbi4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSB3
aXRoaW4gdGhpcyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50
IHRvCi0gICAgICAgICAgICAvLyB0cmVhdCB0aGlzIHJlZ2lvbiBhcyBpZiBpdCB3ZXJlIHRoZSB0
aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93LgotICAgICAgICAgICAgaW50IHkgPSBISVdPUkQo
bFBhcmFtKTsKLQotICAgICAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3aW5k
b3cudG9wICsgZHJhZ0JhckhlaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElP
TjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywg
aFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotICAgIGNhc2UgV01fQ09NTUFORDogewot
ICAgICAgICBpbnQgd21JZCA9IExPV09SRCh3UGFyYW0pOwotICAgICAgICBpbnQgd21FdmVudCA9
IEhJV09SRCh3UGFyYW0pOwotICAgICAgICBpZiAod21JZCA+PSBJRE1fSElTVE9SWV9MSU5LMCAm
JiB3bUlkIDw9IElETV9ISVNUT1JZX0xJTks5KSB7Ci0gICAgICAgICAgICBOYXZpZ2F0ZVRvSGlz
dG9yeShoV25kLCB3bUlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IC8vIFBhcnNlIHRoZSBtZW51IHNlbGVjdGlvbnM6Ci0gICAgICAgIHN3aXRjaCAod21JZCkgewot
ICAgICAgICBjYXNlIElETV9BQk9VVDoKLSAgICAgICAgICAgIERpYWxvZ0JveChoSW5zdCwgTUFL
RUlOVFJFU09VUkNFKElERF9BQk9VVEJPWCksIGhXbmQsIEFib3V0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIElETV9FWElUOgotICAgICAgICAgICAgRGVzdHJveVdpbmRvdyho
V25kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElETV9QUklOVDoKLSAgICAg
ICAgICAgIFByaW50VmlldyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRE1fV0VCX0lOU1BFQ1RPUjoKLSAgICAgICAgICAg
IExhdW5jaEluc3BlY3RvcihoV25kKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElETV9ISVNUT1JZX0JBQ0tXQVJEOgotICAgICAgICBjYXNlIElETV9ISVNUT1JZX0ZPUldBUkQ6
Ci0gICAgICAgICAgICBOYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKGhXbmQsIHdtSWQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURNX0FWRk9VTkRBVElPTjoKLSAgICAgICAg
Y2FzZSBJRE1fQUNDX0NPTVBPU0lUSU5HOgotICAgICAgICBjYXNlIElETV9XS19GVUxMU0NSRUVO
OgotICAgICAgICBjYXNlIElETV9DT01QT1NJVElOR19CT1JERVJTOgotICAgICAgICBjYXNlIElE
TV9ESVNBQkxFX0lNQUdFUzoKLSAgICAgICAgY2FzZSBJRE1fRElTQUJMRV9TVFlMRVM6Ci0gICAg
ICAgIGNhc2UgSURNX0RJU0FCTEVfSkFWQVNDUklQVDoKLSAgICAgICAgY2FzZSBJRE1fRElTQUJM
RV9MT0NBTF9GSUxFX1JFU1RSSUNUSU9OUzoKLSAgICAgICAgICAgIFRvZ2dsZU1lbnVJdGVtKGhX
bmQsIHdtSWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1Bh
cmFtLCBsUGFyYW0pOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXTV9ERVNUUk9ZOgotI2lmIFVTRShDRikKLSAgICAgICAgQ0ZSdW5Mb29wU3RvcChDRlJ1
bkxvb3BHZXRNYWluKCkpOwotI2VuZGlmCi0gICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICBpZiAoIWdXZWJWaWV3IHx8
IHVzZXNMYXllcmVkV2ViVmlldygpKQotICAgICAgICAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2Mo
cGFyZW50UHJvYywgaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwotCi0gICAgICAgIHJl
c2l6ZVN1YlZpZXdzKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBDYWxsV2luZG93UHJvYyhwYXJlbnRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQ
YXJhbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgRWRp
dFByb2MoSFdORCBoRGxnLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9DSEFSOgotICAgICAg
ICBpZiAod1BhcmFtID09IDEzKSB7IC8vIEVudGVyIEtleQotICAgICAgICAgICAgd2NoYXJfdCBz
dHJQdHJbSU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOwotICAgICAgICAgICAgKigoTFBXT1JEKXN0
clB0cikgPSBJTlRFUk5FVF9NQVhfVVJMX0xFTkdUSDsgCi0gICAgICAgICAgICBpbnQgc3RyTGVu
ID0gU2VuZE1lc3NhZ2UoaERsZywgRU1fR0VUTElORSwgMCwgKExQQVJBTSlzdHJQdHIpOwotCi0g
ICAgICAgICAgICBzdHJQdHJbc3RyTGVuXSA9IDA7Ci0gICAgICAgICAgICBfYnN0cl90IGJzdHIo
c3RyUHRyKTsKLSAgICAgICAgICAgIGxvYWRVUkwoYnN0ci5HZXRCU1RSKCkpOwotCi0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfSAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
Q2FsbFdpbmRvd1Byb2MoRGVmRWRpdFByb2MsIGhEbGcsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFt
KTsKLSAgICB9Ci19Ci0KLUxSRVNVTFQgQ0FMTEJBQ0sgQmFja0J1dHRvblByb2MoSFdORCBoRGxn
LCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCitib29sIFdpbkxh
dW5jaGVyOjpnb0JhY2soKQogewogICAgIEJPT0wgd2VudEJhY2sgPSBGQUxTRTsKLSAgICBzd2l0
Y2ggKG1lc3NhZ2UpIHsKLSAgICBjYXNlIFdNX0xCVVRUT05VUDoKLSAgICAgICAgZ1dlYlZpZXct
PmdvQmFjaygmd2VudEJhY2spOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxsV2lu
ZG93UHJvYyhEZWZCdXR0b25Qcm9jLCBoRGxnLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Ci0g
ICAgfQorICAgIG1fd2ViVmlldy0+Z29CYWNrKCZ3ZW50QmFjayk7CisgICAgcmV0dXJuIHdlbnRC
YWNrOwogfQogCi1MUkVTVUxUIENBTExCQUNLIEZvcndhcmRCdXR0b25Qcm9jKEhXTkQgaERsZywg
VUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQorYm9vbCBXaW5MYXVu
Y2hlcjo6Z29Gb3J3YXJkKCkKIHsKICAgICBCT09MIHdlbnRGb3J3YXJkID0gRkFMU0U7Ci0gICAg
c3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGdXZWJW
aWV3LT5nb0ZvcndhcmQoJndlbnRGb3J3YXJkKTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gQ2FsbFdpbmRvd1Byb2MoRGVmQnV0dG9uUHJvYywgaERsZywgbWVzc2FnZSwgd1BhcmFtLCBs
UGFyYW0pOwotICAgIH0KLX0KLQotLy8gTWVzc2FnZSBoYW5kbGVyIGZvciBhYm91dCBib3guCi1J
TlRfUFRSIENBTExCQUNLIEFib3V0KEhXTkQgaERsZywgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQotewotICAgIFVOUkVGRVJFTkNFRF9QQVJBTUVURVIobFBhcmFt
KTsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICBjYXNlIFdNX0lOSVRESUFMT0c6Ci0gICAg
ICAgIHJldHVybiAoSU5UX1BUUilUUlVFOwotCi0gICAgY2FzZSBXTV9DT01NQU5EOgotICAgICAg
ICBpZiAoTE9XT1JEKHdQYXJhbSkgPT0gSURPSyB8fCBMT1dPUkQod1BhcmFtKSA9PSBJRENBTkNF
TCkgewotICAgICAgICAgICAgRW5kRGlhbG9nKGhEbGcsIExPV09SRCh3UGFyYW0pKTsKLSAgICAg
ICAgICAgIHJldHVybiAoSU5UX1BUUilUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICByZXR1cm4gKElOVF9QVFIpRkFMU0U7CisgICAgbV93ZWJWaWV3LT5nb0Zvcndh
cmQoJndlbnRGb3J3YXJkKTsKKyAgICByZXR1cm4gd2VudEZvcndhcmQ7CiB9CiAKLXN0YXRpYyB2
b2lkIGxvYWRVUkwoQlNUUiBwYXNzZWRVUkwpCitIUkVTVUxUIFdpbkxhdW5jaGVyOjpsb2FkVVJM
KGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKIHsKICAgICBfYnN0cl90IHVybEJTdHIocGFzc2VkVVJM
KTsKICAgICBpZiAoISF1cmxCU3RyICYmICg6OlBhdGhGaWxlRXhpc3RzKHVybEJTdHIpIHx8IDo6
UGF0aElzVU5DKHVybEJTdHIpKSkgewogICAgICAgICBUQ0hBUiBmaWxlVVJMW0lOVEVSTkVUX01B
WF9VUkxfTEVOR1RIXTsKLSAgICAgICAgRFdPUkQgZmlsZVVSTExlbmd0aCA9IHNpemVvZihmaWxl
VVJMKS9zaXplb2YoZmlsZVVSTFswXSk7CisgICAgICAgIERXT1JEIGZpbGVVUkxMZW5ndGggPSBz
aXplb2YoZmlsZVVSTCkgLyBzaXplb2YoZmlsZVVSTFswXSk7CiAKICAgICAgICAgaWYgKFNVQ0NF
RURFRCg6OlVybENyZWF0ZUZyb21QYXRoKHVybEJTdHIsIGZpbGVVUkwsICZmaWxlVVJMTGVuZ3Ro
LCAwKSkpCiAgICAgICAgICAgICB1cmxCU3RyID0gZmlsZVVSTDsKICAgICB9CiAKICAgICBJV2Vi
RnJhbWVQdHIgZnJhbWU7Ci0gICAgSFJFU1VMVCBociA9IGdXZWJWaWV3LT5tYWluRnJhbWUoJmZy
YW1lLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBIUkVTVUxUIGhyID0gbV93ZWJWaWV3LT5tYWlu
RnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gaHI7CiAKICAgICBJV2ViTXV0YWJsZVVSTFJl
cXVlc3RQdHIgcmVxdWVzdDsKICAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dl
Yk11dGFibGVVUkxSZXF1ZXN0LCAwLCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoq
KSZyZXF1ZXN0KTsKICAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gaHI7CiAKICAgICBociA9IHJlcXVlc3QtPmluaXRXaXRoVVJMKHdjc3N0cihzdGF0
aWNfY2FzdDx3Y2hhcl90Kj4odXJsQlN0ciksIEwiOi8vIikgPyB1cmxCU3RyIDogX2JzdHJfdChM
Imh0dHA6Ly8iKSArIHVybEJTdHIsIFdlYlVSTFJlcXVlc3RVc2VQcm90b2NvbENhY2hlUG9saWN5
LCA2MCk7CiAgICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIGhyOwogCiAgICAgX2JzdHJfdCBtZXRob2RCU3RyKEwiR0VUIik7CiAgICAgaHIgPSByZXF1
ZXN0LT5zZXRIVFRQTWV0aG9kKG1ldGhvZEJTdHIpOwogICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBocjsKIAogICAgIGhyID0gZnJhbWUtPmxvYWRS
ZXF1ZXN0KHJlcXVlc3QpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm47CiAK
LSAgICBTZXRGb2N1cyhnVmlld1dpbmRvdyk7Ci19Ci0KLWV4dGVybiAiQyIgX19kZWNsc3BlYyhk
bGxleHBvcnQpIGludCBXSU5BUEkgZGxsTGF1bmNoZXJFbnRyeVBvaW50KEhJTlNUQU5DRSBoSW5z
dGFuY2UsIEhJTlNUQU5DRSBoUHJldkluc3RhbmNlLCBMUFdTVFIgbHBzdHJDbWRMaW5lLCBpbnQg
bkNtZFNob3cpCi17Ci0gICAgcmV0dXJuIHdXaW5NYWluKGhJbnN0YW5jZSwgaFByZXZJbnN0YW5j
ZSwgbHBzdHJDbWRMaW5lLCBuQ21kU2hvdyk7CisgICAgcmV0dXJuIGhyOwogfQpJbmRleDogVG9v
bHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVu
Y2hlci9XaW5MYXVuY2hlci5oCShyZXZpc2lvbiAxNzAyOTkpCisrKyBUb29scy9XaW5MYXVuY2hl
ci9XaW5MYXVuY2hlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgInJlc291cmNlLmgiCi0jaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgotCi1jbGFz
cyBXaW5MYXVuY2hlcldlYkhvc3QgOiBwdWJsaWMgSVdlYkZyYW1lTG9hZERlbGVnYXRlCi17Ci1w
dWJsaWM6Ci0gICAgV2luTGF1bmNoZXJXZWJIb3N0KCkgOiBtX3JlZkNvdW50KDEpIHt9Ci0KLSAg
ICAvLyBJVW5rbm93bgotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVy
eUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCk7Ci0gICAgdmlydHVhbCBV
TE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCk7Ci0gICAgdmlydHVhbCBVTE9ORyBT
VERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZvaWQpOwotCi0gICAgLy8gSVdlYkZyYW1lTG9hZERl
bGVnYXRlCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkRm9yRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJW
aWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSogLypmcmFtZSovKSB7IHJldHVybiBT
X09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKCAKLSAgICAgICAg
LyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJh
bWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IoIAotICAgICAg
ICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJF
cnJvciAqZXJyb3IsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKik7Ci0gICAgCi0gICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENvbW1pdExvYWRGb3JGcmFtZSgg
Ci0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0g
Ki8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gdXBkYXRlQWRkcmVzc0Jhcih3ZWJWaWV3KTsg
fQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZl
VGl0bGUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAv
KiBbaW5dICovIEJTVFIgdGl0bGUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFt
ZSkgeyByZXR1cm4gU19PSzsgfQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBkaWRDaGFuZ2VJY29ucygKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2Vi
VmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09L
OyB9Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUlj
b24oIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBb
aW5dICovIE9MRV9IQU5ETEUgaEJpdG1hcCwKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUg
KmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRGb3JGcmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8g
SVdlYlZpZXcqIHdlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAvKmZyYW1l
Ki8pOwotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWls
TG9hZFdpdGhFcnJvciggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0g
ICAgICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yICplcnJvciwKLSAgICAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZvckZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZy
YW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyog
W2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJM
KCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2lu
XSAqLyBCU1RSIHVybCwKLSAgICAgICAgLyogW2luXSAqLyBkb3VibGUgZGVsYXlTZWNvbmRzLAot
ICAgICAgICAvKiBbaW5dICovIERBVEUgZmlyZURhdGUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdl
YkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKCAKLSAg
ICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxDbG9zZUZyYW1lKCAKLSAgICAgICAgLyogW2luXSAq
LyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1l
KSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCAvKiBbbG9jYWxdICovIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCAKLSAgICAg
ICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBKU0Nv
bnRleHRSZWYgY29udGV4dCwKLSAgICAgICAgLyogW2luXSAqLyBKU09iamVjdFJlZiB3aW5kb3dT
Y3JpcHRPYmplY3QpICB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2aXJ0dWFsIC8qIFtsb2NhbF0g
Ki8gSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDbGVhcldpbmRvd09iamVjdCggCi0gICAg
ICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSlND
b250ZXh0UmVmIGNvbnRleHQsCi0gICAgICAgIC8qIFtpbl0gKi8gSlNPYmplY3RSZWYgd2luZG93
U2NyaXB0T2JqZWN0LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0
dXJuIFNfT0s7IH0KLQotICAgIC8vIFdpbkxhdW5jaGVyV2ViSG9zdAotCi1wcm90ZWN0ZWQ6Ci0g
ICAgSFJFU1VMVCB1cGRhdGVBZGRyZXNzQmFyKElXZWJWaWV3KiB3ZWJWaWV3KTsKLQotcHJvdGVj
dGVkOgotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIG1fcmVmQ291bnQ7Ci19OwpJbmRleDog
VG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJSZXBsYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJSZXBsYWNlLmgJKHJldmlzaW9uIDE3MDI5OSkKKysr
IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyUmVwbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiwxMyBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBXaW5MYXVuY2hlclJlcGxh
Y2VfaAorI2RlZmluZSBXaW5MYXVuY2hlclJlcGxhY2VfaAorCiAvLyBUaGlzIGZpbGUgaXMgdG8g
bWFrZSBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIG1hbmFnZSBjaGFuZ2VzIHRvIHRoZSBpbnRlcm5h
bHMgb2YgV2luTGF1bmNoZXIKIAotY29uc3Qgd2NoYXJfdCogZGVmYXVsdEhUTUwgPSBMIjxwIHN0
eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogIzAwRkYwMFwiPlRlc3Rpbmc8L3A+PGltZyBpZD1cIndl
YmtpdCBsb2dvXCIgc3JjPVwiaHR0cDovL3dlYmtpdC5vcmcvaW1hZ2VzL2ljb24tZ29sZC5wbmdc
IiBhbHQ9XCJGYWNlXCI+PGRpdiBzdHlsZT1cImJvcmRlcjogc29saWQgYmx1ZTsgYmFja2dyb3Vu
ZDogd2hpdGU7XCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPmRpdiB3aXRoIGJsdWUgYm9yZGVy
PC9kaXY+PHVsPjxsaT5mb288bGk+YmFyPGxpPmJhejwvdWw+IjsKK3N0YXRpYyBjb25zdCB3Y2hh
cl90KiBkZWZhdWx0SFRNTCA9IEwiPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjMDBGRjAw
XCI+VGVzdGluZzwvcD48aW1nIGlkPVwid2Via2l0IGxvZ29cIiBzcmM9XCJodHRwOi8vd2Via2l0
Lm9yZy9pbWFnZXMvaWNvbi1nb2xkLnBuZ1wiIGFsdD1cIkZhY2VcIj48ZGl2IHN0eWxlPVwiYm9y
ZGVyOiBzb2xpZCBibHVlOyBiYWNrZ3JvdW5kOiB3aGl0ZTtcIiBjb250ZW50ZWRpdGFibGU9XCJ0
cnVlXCI+ZGl2IHdpdGggYmx1ZSBib3JkZXI8L2Rpdj48dWw+PGxpPmZvbzxsaT5iYXI8bGk+YmF6
PC91bD4iOworCitzdGF0aWMgdm9pZCBwcm9jZXNzQ3Jhc2hSZXBvcnQoY29uc3Qgd2NoYXJfdCog
ZmlsZU5hbWUpIHsgOjpNZXNzYWdlQm94KDAsIGZpbGVOYW1lLCBMIkNyYXNoIFJlcG9ydCIsIE1C
X09LKTsgfQogCi12b2lkIHByb2Nlc3NDcmFzaFJlcG9ydChjb25zdCB3Y2hhcl90KiBmaWxlTmFt
ZSkgeyA6Ok1lc3NhZ2VCb3goMCwgZmlsZU5hbWUsIEwiQ3Jhc2ggUmVwb3J0IiwgTUJfT0spOyB9
CisjZW5kaWYKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJXZWJIb3N0LmNwcAko
cmV2aXNpb24gMCkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBcHBjZWxlcmF0b3IsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IENocmlzdGVuc2Vu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgInN0ZGFmeC5oIgorI2luY2x1ZGUgIldpbkxhdW5jaGVyV2Vi
SG9zdC5oIgorCisjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKKyNpbmNsdWRlICJXaW5MYXVu
Y2hlci5oIgorI2luY2x1ZGUgPFdlYktpdC9XZWJLaXQuaD4KKworY2xhc3MgU2ltcGxlRXZlbnRM
aXN0ZW5lciA6IHB1YmxpYyBET01FdmVudExpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBTaW1wbGVF
dmVudExpc3RlbmVyKExQV1NUUiB0eXBlKQorICAgIHsKKyAgICAgICAgd2NzbmNweV9zKG1fZXZl
bnRUeXBlLCAxMDAsIHR5cGUsIDEwMCk7CisgICAgICAgIG1fZXZlbnRUeXBlWzk5XSA9IDA7Cisg
ICAgfQorCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGhhbmRsZUV2ZW50
KElET01FdmVudCogZXZ0KQorICAgIHsKKyAgICAgICAgd2NoYXJfdCBtZXNzYWdlWzI1NV07Cisg
ICAgICAgIHdjc2NweV9zKG1lc3NhZ2UsIDI1NSwgbV9ldmVudFR5cGUpOworICAgICAgICB3Y3Nj
YXRfcyhtZXNzYWdlLCAyNTUsIEwiIGV2ZW50IGZpcmVkISIpOworICAgICAgICA6Ok1lc3NhZ2VC
b3goMCwgbWVzc2FnZSwgTCJFdmVudCBIYW5kbGVyIiwgTUJfT0spOworICAgICAgICByZXR1cm4g
U19PSzsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgd2NoYXJfdCBtX2V2ZW50VHlwZVsxMDBdOwor
fTsKKwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWUsICZfX3V1aWRvZihJ
V2ViRnJhbWUpPj4gSVdlYkZyYW1lUHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJ
V2ViRGF0YVNvdXJjZSwgJl9fdXVpZG9mKElXZWJEYXRhU291cmNlKT4+IElXZWJEYXRhU291cmNl
UHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3Qs
ICZfX3V1aWRvZihJV2ViTXV0YWJsZVVSTFJlcXVlc3QpPj4gSVdlYk11dGFibGVVUkxSZXF1ZXN0
UHRyOworCitIUkVTVUxUIFdpbkxhdW5jaGVyV2ViSG9zdDo6dXBkYXRlQWRkcmVzc0JhcihJV2Vi
VmlldyYgd2ViVmlldykKK3sKKyAgICBJV2ViRnJhbWVQdHIgbWFpbkZyYW1lOworICAgIEhSRVNV
TFQgaHIgPSB3ZWJWaWV3Lm1haW5GcmFtZSgmbWFpbkZyYW1lLkdldEludGVyZmFjZVB0cigpKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBJV2ViRGF0YVNv
dXJjZVB0ciBkYXRhU291cmNlOworICAgIGhyID0gbWFpbkZyYW1lLT5kYXRhU291cmNlKCZkYXRh
U291cmNlLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSB8fCAhZGF0YVNv
dXJjZSkKKyAgICAgICAgaHIgPSBtYWluRnJhbWUtPnByb3Zpc2lvbmFsRGF0YVNvdXJjZSgmZGF0
YVNvdXJjZS5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikgfHwgIWRhdGFT
b3VyY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRy
IHJlcXVlc3Q7CisgICAgaHIgPSBkYXRhU291cmNlLT5yZXF1ZXN0KCZyZXF1ZXN0LkdldEludGVy
ZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSB8fCAhcmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBfYnN0cl90IGZyYW1lVVJMOworICAgIGhyID0gcmVxdWVzdC0+bWFpbkRv
Y3VtZW50VVJMKGZyYW1lVVJMLkdldEFkZHJlc3MoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgOjpTZW5kTWVzc2FnZShtX2hVUkxCYXJXbmQsIHN0YXRp
Y19jYXN0PFVJTlQ+KFdNX1NFVFRFWFQpLCAwLCByZWludGVycHJldF9jYXN0PExQQVJBTT4oZnJh
bWVVUkwuR2V0QlNUUigpKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworSFJFU1VMVCBXaW5MYXVu
Y2hlcldlYkhvc3Q6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IoSVdlYlZpZXcqLCBJ
V2ViRXJyb3IgKmVycm9yLCBJV2ViRnJhbWUqKQoreworICAgIF9ic3RyX3QgZXJyb3JEZXNjcmlw
dGlvbjsKKyAgICBIUkVTVUxUIGhyID0gZXJyb3ItPmxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9y
RGVzY3JpcHRpb24uR2V0QWRkcmVzcygpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
ZXJyb3JEZXNjcmlwdGlvbiA9IEwiRmFpbGVkIHRvIGxvYWQgcGFnZSBhbmQgdG8gbG9jYWxpemUg
ZXJyb3IgZGVzY3JpcHRpb24uIjsKKworICAgIGlmIChfd2NzaWNtcChlcnJvckRlc2NyaXB0aW9u
LCBMIkNhbmNlbGxlZCIpKQorICAgICAgICA6Ok1lc3NhZ2VCb3hXKDAsIHN0YXRpY19jYXN0PExQ
Q1dTVFI+KGVycm9yRGVzY3JpcHRpb24pLCBMIkVycm9yIiwgTUJfQVBQTE1PREFMIHwgTUJfT0sp
OworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgV2luTGF1bmNoZXJXZWJIb3N0OjpR
dWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICAqcHB2
T2JqZWN0ID0gMDsKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgSUlEX0lVbmtub3duKSkKKyAg
ICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElXZWJGcmFtZUxvYWREZWxlZ2F0ZSo+KHRo
aXMpOworICAgIGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIElJRF9JV2ViRnJhbWVMb2FkRGVs
ZWdhdGUpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SVdlYkZyYW1lTG9hZERl
bGVnYXRlKj4odGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsK
KworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBXaW5MYXVuY2hl
cldlYkhvc3Q6OkFkZFJlZigpCit7CisgICAgcmV0dXJuICsrbV9yZWZDb3VudDsKK30KKworVUxP
TkcgV2luTGF1bmNoZXJXZWJIb3N0OjpSZWxlYXNlKCkKK3sKKyAgICBVTE9ORyBuZXdSZWYgPSAt
LW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAgICAgIGRlbGV0ZSh0aGlzKTsKKwor
ICAgIHJldHVybiBuZXdSZWY7Cit9CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SURP
TURvY3VtZW50LCAmX191dWlkb2YoSURPTURvY3VtZW50KT4+IElET01Eb2N1bWVudFB0cjsKK3R5
cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SURPTUVsZW1lbnQsICZfX3V1aWRvZihJRE9NRWxl
bWVudCk+PiBJRE9NRWxlbWVudFB0cjsKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SURP
TUV2ZW50VGFyZ2V0LCAmX191dWlkb2YoSURPTUV2ZW50VGFyZ2V0KT4+IElET01FdmVudFRhcmdl
dFB0cjsKKworSFJFU1VMVCBXaW5MYXVuY2hlcldlYkhvc3Q6OmRpZEZpbmlzaExvYWRGb3JGcmFt
ZShJV2ViVmlldyogd2ViVmlldywgSVdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICBJRE9NRG9jdW1l
bnRQdHIgZG9jOworICAgIGZyYW1lLT5ET01Eb2N1bWVudCgmZG9jLkdldEludGVyZmFjZVB0cigp
KTsKKworICAgIElET01FbGVtZW50UHRyIGVsZW1lbnQ7CisgICAgSURPTUV2ZW50VGFyZ2V0UHRy
IHRhcmdldDsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNob3dMYXN0
VmlzaXRlZFNpdGVzKCp3ZWJWaWV3KTsKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgZm9yIHRo
ZSB0ZXN0IHBhZ2U6CisgICAgSFJFU1VMVCBociA9IGRvYy0+Z2V0RWxlbWVudEJ5SWQoTCJ3ZWJr
aXQgbG9nbyIsICZlbGVtZW50LkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoIVNVQ0NFRURF
RChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gZWxlbWVudC0+UXVlcnlJbnRl
cmZhY2UoSUlEX0lET01FdmVudFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0YXJn
ZXQuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGhyID0gdGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKEwiY2xpY2si
LCBuZXcgU2ltcGxlRXZlbnRMaXN0ZW5lciAoTCJ3ZWJraXQgbG9nbyBjbGljayIpLCBGQUxTRSk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICByZXR1
cm4gaHI7Cit9CkluZGV4OiBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlcldlYkhvc3QuaAkocmV2
aXNpb24gMTcwMjk5KQkoZnJvbSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci5oOjE3MDI5
OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyV2ViSG9zdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgInJlc291cmNlLmgiCisjaW5j
bHVkZSA8V2ViS2l0L1dlYktpdC5oPgorCitjbGFzcyBXaW5MYXVuY2hlcldlYkhvc3QgOiBwdWJs
aWMgSVdlYkZyYW1lTG9hZERlbGVnYXRlCit7CitwdWJsaWM6CisgICAgV2luTGF1bmNoZXJXZWJI
b3N0KCkgOiBtX3JlZkNvdW50KDEpIHt9CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwgdm9p
ZCoqIHBwdk9iamVjdCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRS
ZWYodm9pZCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKHZv
aWQpOworCisgICAgLy8gSVdlYkZyYW1lTG9hZERlbGVnYXRlCisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoIAorICAg
ICAgICAvKiBbaW5dICovIElXZWJWaWV3KiB3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIElX
ZWJGcmFtZSogLypmcmFtZSovKSB7IHJldHVybiBTX09LOyB9CisgICAgCisgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTG9hZEZvckZyYW1lKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmll
dywKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9
CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoRXJyb3IoIAorICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJW
aWV3LAorICAgICAgICAvKiBbaW5dICovIElXZWJFcnJvciAqZXJyb3IsCisgICAgICAgIC8qIFtp
bl0gKi8gSVdlYkZyYW1lKik7CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGRpZENvbW1pdExvYWRGb3JGcmFtZSggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZp
ZXcgKndlYlZpZXcsCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1
cm4gdXBkYXRlQWRkcmVzc0Jhcih3ZWJWaWV3KTsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlVGl0bGUoIAorICAgICAgICAvKiBbaW5dICov
IElXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUsCisgICAg
ICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQorICAgIAor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDaGFuZ2VJY29ucygKKyAg
ICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVjZWl2ZUljb24oIAorICAgICAgICAvKiBbaW5dICovIElX
ZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAvKiBbaW5dICovIE9MRV9IQU5ETEUgaEJpdG1hcCwK
KyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Cisg
ICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRG
b3JGcmFtZSggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCisgICAgICAg
IC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAvKmZyYW1lKi8pOworICAgIAorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWlsTG9hZFdpdGhFcnJvciggCisgICAgICAgIC8q
IFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkVycm9y
ICplcnJvciwKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZvckZyYW1lKSB7IHJldHVy
biBTX09LOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRp
ZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZUZvckZyYW1lKCAKKyAgICAgICAgLyogW2luXSAqLyBJ
V2ViVmlldyAqd2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7
IHJldHVybiBTX09LOyB9CisKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2Vi
VmlldyAqd2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBCU1RSIHVybCwKKyAgICAgICAgLyog
W2luXSAqLyBkb3VibGUgZGVsYXlTZWNvbmRzLAorICAgICAgICAvKiBbaW5dICovIERBVEUgZmly
ZURhdGUsCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19P
SzsgfQorICAgIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDYW5j
ZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAq
d2ViVmlldywKKyAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBT
X09LOyB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxD
bG9zZUZyYW1lKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKKyAgICAg
ICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9CisgICAgCisg
ICAgdmlydHVhbCAvKiBbbG9jYWxdICovIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2luZG93
U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCAKKyAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2Vi
VmlldywKKyAgICAgICAgLyogW2luXSAqLyBKU0NvbnRleHRSZWYgY29udGV4dCwKKyAgICAgICAg
LyogW2luXSAqLyBKU09iamVjdFJlZiB3aW5kb3dTY3JpcHRPYmplY3QpICB7IHJldHVybiBTX09L
OyB9CisKKyAgICB2aXJ0dWFsIC8qIFtsb2NhbF0gKi8gSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBkaWRDbGVhcldpbmRvd09iamVjdCggCisgICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndl
YlZpZXcsCisgICAgICAgIC8qIFtpbl0gKi8gSlNDb250ZXh0UmVmIGNvbnRleHQsCisgICAgICAg
IC8qIFtpbl0gKi8gSlNPYmplY3RSZWYgd2luZG93U2NyaXB0T2JqZWN0LAorICAgICAgICAvKiBb
aW5dICovIElXZWJGcmFtZSAqZnJhbWUpIHsgcmV0dXJuIFNfT0s7IH0KKworICAgIC8vIFdpbkxh
dW5jaGVyV2ViSG9zdAorCitwcm90ZWN0ZWQ6CisgICAgSFJFU1VMVCB1cGRhdGVBZGRyZXNzQmFy
KElXZWJWaWV3KiB3ZWJWaWV3KTsKKworcHJvdGVjdGVkOgorICAgIFVMT05HICAgICAgICAgICAg
ICAgICAgIG1fcmVmQ291bnQ7Cit9OwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNo
ZXJXZWJIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTGF1bmNoZXJX
ZWJIb3N0LmgJKHdvcmtpbmcgY29weSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVy
V2ViSG9zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDkyICsyOCw0NyBAQAogI2luY2x1ZGUgInJl
c291cmNlLmgiCiAjaW5jbHVkZSA8V2ViS2l0L1dlYktpdC5oPgogCi1jbGFzcyBXaW5MYXVuY2hl
cldlYkhvc3QgOiBwdWJsaWMgSVdlYkZyYW1lTG9hZERlbGVnYXRlCi17CitjbGFzcyBXaW5MYXVu
Y2hlcjsKKworY2xhc3MgV2luTGF1bmNoZXJXZWJIb3N0IDogcHVibGljIElXZWJGcmFtZUxvYWRE
ZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAgV2luTGF1bmNoZXJXZWJIb3N0KCkgOiBtX3JlZkNvdW50
KDEpIHt9CisgICAgV2luTGF1bmNoZXJXZWJIb3N0KFdpbkxhdW5jaGVyKiBjbGllbnQsIEhXTkQg
dXJsQmFyKQorICAgICAgICA6IG1fcmVmQ291bnQoMSksIG1fY2xpZW50KGNsaWVudCksIG1faFVS
TEJhclduZCh1cmxCYXIpIHsgfQogCiAgICAgLy8gSVVua25vd24KICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBw
cHZPYmplY3QpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZv
aWQpOwotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKTsK
KyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZpcnR1
YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSgpOwogCiAgICAgLy8gSVdlYkZyYW1l
TG9hZERlbGVnYXRlCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFN0
YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3
KiB3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSogLypmcmFtZSovKSB7IHJl
dHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKCAKLSAg
ICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJ
V2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IoIAot
ICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAgICAvKiBbaW5dICov
IElXZWJFcnJvciAqZXJyb3IsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKik7Ci0gICAg
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENvbW1pdExvYWRGb3JG
cmFtZSggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8q
IFtpbl0gKi8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gdXBkYXRlQWRkcmVzc0Jhcih3ZWJW
aWV3KTsgfQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRS
ZWNlaXZlVGl0bGUoIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAg
ICAgICAvKiBbaW5dICovIEJTVFIgdGl0bGUsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1l
ICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBkaWRDaGFuZ2VJY29ucygKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmll
dyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVy
biBTX09LOyB9Ci0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkUmVj
ZWl2ZUljb24oIAotICAgICAgICAvKiBbaW5dICovIElXZWJWaWV3ICp3ZWJWaWV3LAotICAgICAg
ICAvKiBbaW5dICovIE9MRV9IQU5ETEUgaEJpdG1hcCwKLSAgICAgICAgLyogW2luXSAqLyBJV2Vi
RnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlzaExvYWRGb3JGcmFtZSggCi0gICAgICAgIC8qIFtp
bl0gKi8gSVdlYlZpZXcqIHdlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkZyYW1lKiAv
KmZyYW1lKi8pOwotICAgIAotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBk
aWRGYWlsTG9hZFdpdGhFcnJvciggCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZp
ZXcsCi0gICAgICAgIC8qIFtpbl0gKi8gSVdlYkVycm9yICplcnJvciwKLSAgICAgICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUgKmZvckZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFn
ZUZvckZyYW1lKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAg
ICAgLyogW2luXSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dFRvVVJMKCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAg
LyogW2luXSAqLyBCU1RSIHVybCwKLSAgICAgICAgLyogW2luXSAqLyBkb3VibGUgZGVsYXlTZWNv
bmRzLAotICAgICAgICAvKiBbaW5dICovIERBVEUgZmlyZURhdGUsCi0gICAgICAgIC8qIFtpbl0g
Ki8gSVdlYkZyYW1lICpmcmFtZSkgeyByZXR1cm4gU19PSzsgfQotICAgIAotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1l
KCAKLSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2lu
XSAqLyBJV2ViRnJhbWUgKmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxDbG9zZUZyYW1lKCAKLSAgICAgICAgLyog
W2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAqLyBJV2ViRnJhbWUg
KmZyYW1lKSB7IHJldHVybiBTX09LOyB9Ci0gICAgCi0gICAgdmlydHVhbCAvKiBbbG9jYWxdICov
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlKCAK
LSAgICAgICAgLyogW2luXSAqLyBJV2ViVmlldyAqd2ViVmlldywKLSAgICAgICAgLyogW2luXSAq
LyBKU0NvbnRleHRSZWYgY29udGV4dCwKLSAgICAgICAgLyogW2luXSAqLyBKU09iamVjdFJlZiB3
aW5kb3dTY3JpcHRPYmplY3QpICB7IHJldHVybiBTX09LOyB9Ci0KLSAgICB2aXJ0dWFsIC8qIFts
b2NhbF0gKi8gSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDbGVhcldpbmRvd09iamVjdCgg
Ci0gICAgICAgIC8qIFtpbl0gKi8gSVdlYlZpZXcgKndlYlZpZXcsCi0gICAgICAgIC8qIFtpbl0g
Ki8gSlNDb250ZXh0UmVmIGNvbnRleHQsCi0gICAgICAgIC8qIFtpbl0gKi8gSlNPYmplY3RSZWYg
d2luZG93U2NyaXB0T2JqZWN0LAotICAgICAgICAvKiBbaW5dICovIElXZWJGcmFtZSAqZnJhbWUp
IHsgcmV0dXJuIFNfT0s7IH0KLQotICAgIC8vIFdpbkxhdW5jaGVyV2ViSG9zdAorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKElXZWJWaWV3KiwgSVdlYkZyYW1lKikgeyByZXR1cm4gU19PSzsgfQorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZShJV2ViVmlldyosIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7
IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmFpbFByb3Zpc2lv
bmFsTG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElXZWJFcnJvciosIElXZWJGcmFtZSopOworICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRDb21taXRMb2FkRm9yRnJhbWUo
SVdlYlZpZXcqIHdlYlZpZXcsIElXZWJGcmFtZSopCisgICAgeworICAgICAgICBpZiAoIXdlYlZp
ZXcpCisgICAgICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgICAgIHJldHVybiB1cGRh
dGVBZGRyZXNzQmFyKCp3ZWJWaWV3KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2VpdmVUaXRsZShJV2ViVmlldyosIEJTVFIgdGl0bGUs
IElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgZGlkQ2hhbmdlSWNvbnMoSVdlYlZpZXcqLCBJV2ViRnJhbWUqKSB7IHJldHVy
biBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZFJlY2Vp
dmVJY29uKElXZWJWaWV3KiwgT0xFX0hBTkRMRSBoQml0bWFwLCBJV2ViRnJhbWUqKSB7IHJldHVy
biBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRpZEZpbmlz
aExvYWRGb3JGcmFtZShJV2ViVmlldyosIElXZWJGcmFtZSopOyAgIAorICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGYWlsTG9hZFdpdGhFcnJvcihJV2ViVmlldyosIElX
ZWJFcnJvciosIElXZWJGcmFtZSopIHsgcmV0dXJuIFNfT0s7IH0KKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWUo
SVdlYlZpZXcqLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTChJV2Vi
VmlldyosIEJTVFIgdXJsLCBkb3VibGUgZGVsYXlTZWNvbmRzLCBEQVRFIGZpcmVEYXRlLCBJV2Vi
RnJhbWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoSVdlYlZpZXcqLCBJV2ViRnJh
bWUqKSB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHdpbGxDbG9zZUZyYW1lKElXZWJWaWV3KiwgSVdlYkZyYW1lKikgeyByZXR1cm4gU19PSzsg
fQorICAgIHZpcnR1YWwgLyogW2xvY2FsXSAqLyBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdp
bmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZShJV2ViVmlldyosIEpTQ29udGV4dFJlZiwgSlNPYmpl
Y3RSZWYpICB7IHJldHVybiBTX09LOyB9CisgICAgdmlydHVhbCAvKiBbbG9jYWxdICovIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkQ2xlYXJXaW5kb3dPYmplY3QoSVdlYlZpZXcqLCBKU0Nv
bnRleHRSZWYsIEpTT2JqZWN0UmVmLCBJV2ViRnJhbWUqKSB7IHJldHVybiBTX09LOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBIUkVTVUxUIHVwZGF0ZUFkZHJlc3NCYXIoSVdlYlZpZXcqIHdlYlZpZXcp
OworICAgIEhSRVNVTFQgdXBkYXRlQWRkcmVzc0JhcihJV2ViVmlldyYpOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgbV9yZWZDb3VudDsKK3ByaXZhdGU6CisgICAg
SFdORCBtX2hVUkxCYXJXbmQ7CisgICAgVUxPTkcgbV9yZWZDb3VudDsKKyAgICBXaW5MYXVuY2hl
ciogbV9jbGllbnQ7CiB9OwpJbmRleDogVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2luTGF1bmNoZXIvV2luTWFpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBUb29scy9XaW5MYXVuY2hlci9XaW5NYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEx
IEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiQ29tbW9uLmNwcCIKKyNpbmNsdWRlICJXaW5MYXVuY2hl
ckxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAiV2luTGF1bmNoZXJXZWJIb3N0LmgiCisKK2ludCBX
SU5BUEkgd1dpbk1haW4oSElOU1RBTkNFLCBISU5TVEFOQ0UsIFBXU1RSLCBpbnQgbkNtZFNob3cp
Cit7CisjaWZkZWYgX0NSVERCR19NQVBfQUxMT0MKKyAgICBfQ3J0U2V0UmVwb3J0RmlsZShfQ1JU
X1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOworICAgIF9DcnRTZXRSZXBvcnRNb2RlKF9DUlRf
V0FSTiwgX0NSVERCR19NT0RFX0ZJTEUpOworI2VuZGlmCisKKyAgICBNU0cgbXNnID0gezB9Owor
ICAgIEhBQ0NFTCBoQWNjZWxUYWJsZTsKKworICAgIElOSVRDT01NT05DT05UUk9MU0VYIEluaXRD
dHJsRXg7CisKKyAgICBJbml0Q3RybEV4LmR3U2l6ZSA9IHNpemVvZihJTklUQ09NTU9OQ09OVFJP
TFNFWCk7CisgICAgSW5pdEN0cmxFeC5kd0lDQyAgPSAweDAwMDA0MDAwOyAvLyBJQ0NfU1RBTkRB
UkRfQ0xBU1NFUzsKKyAgICBJbml0Q29tbW9uQ29udHJvbHNFeCgmSW5pdEN0cmxFeCk7CisKKyAg
ICBib29sIHVzZXNMYXllcmVkV2ViVmlldyA9IGZhbHNlOworICAgIGJvb2wgdXNlRnVsbERlc2t0
b3AgPSBmYWxzZTsKKworICAgIF9ic3RyX3QgcmVxdWVzdGVkVVJMOworICAgIGludCBhcmdjID0g
MDsKKyAgICBXQ0hBUioqIGFyZ3YgPSBDb21tYW5kTGluZVRvQXJndlcoR2V0Q29tbWFuZExpbmVX
KCksICZhcmdjKTsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworICAgICAg
ICBpZiAoIXdjc2ljbXAoYXJndltpXSwgTCItLXRyYW5zcGFyZW50IikpCisgICAgICAgICAgICB1
c2VzTGF5ZXJlZFdlYlZpZXcgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghd2NzaWNtcChhcmd2
W2ldLCBMIi0tZGVza3RvcCIpKQorICAgICAgICAgICAgdXNlRnVsbERlc2t0b3AgPSB0cnVlOwor
ICAgICAgICBlbHNlIGlmICghcmVxdWVzdGVkVVJMKQorICAgICAgICAgICAgcmVxdWVzdGVkVVJM
ID0gYXJndltpXTsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIGdsb2JhbCBzdHJpbmdzCisg
ICAgTG9hZFN0cmluZyhoSW5zdCwgSURTX0FQUF9USVRMRSwgc3pUaXRsZSwgTUFYX0xPQURTVFJJ
TkcpOworICAgIExvYWRTdHJpbmcoaEluc3QsIElEQ19XSU5MQVVOQ0hFUiwgc3pXaW5kb3dDbGFz
cywgTUFYX0xPQURTVFJJTkcpOworICAgIE15UmVnaXN0ZXJDbGFzcyhoSW5zdCk7CisKKyAgICBp
ZiAodXNlRnVsbERlc2t0b3ApCisgICAgICAgIGNvbXB1dGVGdWxsRGVza3RvcEZyYW1lKCk7CisK
KyAgICAvLyBJbml0IENPTQorICAgIE9sZUluaXRpYWxpemUobnVsbHB0cik7CisKKyAgICBpZiAo
dXNlc0xheWVyZWRXZWJWaWV3KSB7CisgICAgICAgIGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3co
TCJFRElUIiwgTCJUeXBlIFVSTCBIZXJlIiwKKyAgICAgICAgICAgIFdTX09WRVJMQVBQRURXSU5E
T1cgfCBXU19WSVNJQkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCAK
KyAgICAgICAgICAgIHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193
aW5kb3dTaXplLmN5LCBzX3dpbmRvd1NpemUuY3gsIFVSTEJBUl9IRUlHSFQsCisgICAgICAgICAg
ICAwLCAwLCBoSW5zdCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaE1haW5XbmQgPSBDcmVh
dGVXaW5kb3coc3pXaW5kb3dDbGFzcywgc3pUaXRsZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKKyAg
ICAgICAgICAgIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsIDAsIDAsIGhJbnN0
LCAwKTsKKworICAgICAgICBpZiAoIWhNYWluV25kKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgICAgIGhCYWNrQnV0dG9uV25kID0gQ3JlYXRlV2luZG93KEwiQlVUVE9OIiwgTCI8
IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIDAsIDAsIDAsIDAsIGhNYWluV25k
LCAwLCBoSW5zdCwgMCk7CisgICAgICAgIGhGb3J3YXJkQnV0dG9uV25kID0gQ3JlYXRlV2luZG93
KEwiQlVUVE9OIiwgTCI+IiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFICB8IEJTX1RFWFQsIENPTlRS
T0xCVVRUT05fV0lEVEgsIDAsIDAsIDAsIGhNYWluV25kLCAwLCBoSW5zdCwgMCk7CisgICAgICAg
IGhVUkxCYXJXbmQgPSBDcmVhdGVXaW5kb3coTCJFRElUIiwgMCwgV1NfQ0hJTEQgfCBXU19WSVNJ
QkxFIHwgV1NfQk9SREVSIHwgRVNfTEVGVCB8IEVTX0FVVE9WU0NST0xMLCBDT05UUk9MQlVUVE9O
X1dJRFRIICogMiwgMCwgMCwgMCwgaE1haW5XbmQsIDAsIGhJbnN0LCAwKTsKKworICAgICAgICBT
aG93V2luZG93KGhNYWluV25kLCBuQ21kU2hvdyk7CisgICAgICAgIFVwZGF0ZVdpbmRvdyhoTWFp
blduZCk7CisgICAgfQorCisgICAgRGVmRWRpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBS
T0M+KEdldFdpbmRvd0xvbmdQdHIoaFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgRGVm
QnV0dG9uUHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oR2V0V2luZG93TG9uZ1B0ciho
QmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DKSk7CisgICAgU2V0V2luZG93TG9uZ1B0cihoVVJM
QmFyV25kLCBHV0xQX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KEVkaXRQcm9j
KSk7CisgICAgU2V0V2luZG93TG9uZ1B0cihoQmFja0J1dHRvblduZCwgR1dMUF9XTkRQUk9DLCBy
ZWludGVycHJldF9jYXN0PExPTkdfUFRSPihCYWNrQnV0dG9uUHJvYykpOworICAgIFNldFdpbmRv
d0xvbmdQdHIoaEZvcndhcmRCdXR0b25XbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2Fz
dDxMT05HX1BUUj4oRm9yd2FyZEJ1dHRvblByb2MpKTsKKworICAgIFNldEZvY3VzKGhVUkxCYXJX
bmQpOworCisgICAgUkVDVCBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNfd2lu
ZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBzX3dp
bmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKKworICAgIGdXaW5MYXVuY2hlciA9
IG5ldyBXaW5MYXVuY2hlcihoTWFpblduZCwgaFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3
KTsKKyAgICBpZiAoIWdXaW5MYXVuY2hlcikKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYg
KCFnV2luTGF1bmNoZXItPnNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkpCisgICAgICAg
IGdvdG8gZXhpdDsKKworICAgIGlmICghZ1dpbkxhdW5jaGVyLT5zZXRUb0RlZmF1bHRQcmVmZXJl
bmNlcygpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBIUkVTVUxUIGhyID0gZ1dpbkxhdW5j
aGVyLT5pbml0KCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIGdvdG8gZXhpdDsKKwor
ICAgIGlmICghc2V0Q2FjaGVGb2xkZXIoKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaHIg
PSBnV2luTGF1bmNoZXItPnNldEZyYW1lTG9hZERlbGVnYXRlKG5ldyBXaW5MYXVuY2hlcldlYkhv
c3QoZ1dpbkxhdW5jaGVyLCBoVVJMQmFyV25kKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAg
ICAgIGdvdG8gZXhpdDsKKworICAgIGhyID0gZ1dpbkxhdW5jaGVyLT5zZXRVSURlbGVnYXRlKG5l
dyBQcmludFdlYlVJRGVsZWdhdGUoKSk7CisgICAgaWYgKEZBSUxFRCAoaHIpKQorICAgICAgICBn
b3RvIGV4aXQ7CisKKyAgICBociA9IGdXaW5MYXVuY2hlci0+c2V0QWNjZXNzaWJpbGl0eURlbGVn
YXRlKG5ldyBBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoKSk7CisgICAgaWYgKEZBSUxFRCAoaHIpKQor
ICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBociA9IGdXaW5MYXVuY2hlci0+cHJlcGFyZVZpZXdz
KGhNYWluV25kLCBjbGllbnRSZWN0LCByZXF1ZXN0ZWRVUkwuR2V0QlNUUigpLCBnVmlld1dpbmRv
dyk7CisgICAgaWYgKEZBSUxFRChocikgfHwgIWdWaWV3V2luZG93KQorICAgICAgICBnb3RvIGV4
aXQ7CisKKyAgICBpZiAoZ1dpbkxhdW5jaGVyLT51c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAg
ICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7CisKKyAgICByZXNpemVTdWJWaWV3cygpOwor
CisgICAgU2hvd1dpbmRvdyhnVmlld1dpbmRvdywgbkNtZFNob3cpOworICAgIFVwZGF0ZVdpbmRv
dyhnVmlld1dpbmRvdyk7CisKKyAgICBoQWNjZWxUYWJsZSA9IExvYWRBY2NlbGVyYXRvcnMoaElu
c3QsIE1BS0VJTlRSRVNPVVJDRShJRENfV0lOTEFVTkNIRVIpKTsKKworICAgIGlmIChyZXF1ZXN0
ZWRVUkwubGVuZ3RoKCkpCisgICAgICAgIGxvYWRVUkwocmVxdWVzdGVkVVJMLkdldEJTVFIoKSk7
CisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MDkpCisKKyAgICAvLyBNYWluIG1lc3NhZ2Ug
bG9vcDoKKyAgICBfX3RyeSB7CisgICAgICAgIHdoaWxlIChHZXRNZXNzYWdlKCZtc2csIDAsIDAs
IDApKSB7CisjaWYgVVNFKENGKQorICAgICAgICAgICAgQ0ZSdW5Mb29wUnVuSW5Nb2RlKGtDRlJ1
bkxvb3BEZWZhdWx0TW9kZSwgMCwgdHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghVHJh
bnNsYXRlQWNjZWxlcmF0b3IobXNnLmh3bmQsIGhBY2NlbFRhYmxlLCAmbXNnKSkgeworICAgICAg
ICAgICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisgICAgICAgICAgICAgICAgRGlzcGF0
Y2hNZXNzYWdlKCZtc2cpOworICAgICAgICAgICAgfQorI2lmIFVTRShHTElCKQorICAgICAgICAg
ICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKDAsIGZhbHNlKTsKKyNlbmRpZgorICAgICAgICB9
CisgICAgfSBfX2V4Y2VwdChjcmVhdGVDcmFzaFJlcG9ydChHZXRFeGNlcHRpb25JbmZvcm1hdGlv
bigpKSwgRVhDRVBUSU9OX0VYRUNVVEVfSEFORExFUikgeyB9CisKK2V4aXQ6CisgICAgc2h1dERv
d25XZWJLaXQoKTsKKyNpZmRlZiBfQ1JUREJHX01BUF9BTExPQworICAgIF9DcnREdW1wTWVtb3J5
TGVha3MoKTsKKyNlbmRpZgorCisgICAgLy8gU2h1dCBkb3duIENPTS4KKyAgICBPbGVVbmluaXRp
YWxpemUoKTsKKworICAgIGRlbGV0ZSBnV2luTGF1bmNoZXI7CisgICAgCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4obXNnLndQYXJhbSk7Cit9CisKK0FUT00gTXlSZWdpc3RlckNsYXNzKEhJ
TlNUQU5DRSBoSW5zdGFuY2UpCit7CisgICAgV05EQ0xBU1NFWCB3Y2V4OworCisgICAgd2NleC5j
YlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7CisKKyAgICB3Y2V4LnN0eWxlICAgICAgICAgID0g
Q1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CisgICAgd2NleC5scGZuV25kUHJvYyAgICA9IFduZFBy
b2M7CisgICAgd2NleC5jYkNsc0V4dHJhICAgICA9IDA7CisgICAgd2NleC5jYlduZEV4dHJhICAg
ICA9IDA7CisgICAgd2NleC5oSW5zdGFuY2UgICAgICA9IGhJbnN0YW5jZTsKKyAgICB3Y2V4LmhJ
Y29uICAgICAgICAgID0gTG9hZEljb24oaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1dJ
TkxBVU5DSEVSKSk7CisgICAgd2NleC5oQ3Vyc29yICAgICAgICA9IExvYWRDdXJzb3IoMCwgSURD
X0FSUk9XKTsKKyAgICB3Y2V4LmhickJhY2tncm91bmQgID0gMDsKKyAgICB3Y2V4Lmxwc3pNZW51
TmFtZSAgID0gTUFLRUlOVFJFU09VUkNFKElEQ19XSU5MQVVOQ0hFUik7CisgICAgd2NleC5scHN6
Q2xhc3NOYW1lICA9IHN6V2luZG93Q2xhc3M7CisgICAgd2NleC5oSWNvblNtICAgICAgICA9IExv
YWRJY29uKHdjZXguaEluc3RhbmNlLCBNQUtFSU5UUkVTT1VSQ0UoSURJX1NNQUxMKSk7CisKKyAg
ICByZXR1cm4gUmVnaXN0ZXJDbGFzc0V4KCZ3Y2V4KTsKK30KSW5kZXg6IFRvb2xzL1dpbkxhdW5j
aGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci52Y3hwcm9qL1dpbkxhdW5jaGVyTGli
LnZjeHByb2oJKHJldmlzaW9uIDE3MDI5OSkKKysrIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5j
aGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAz
LDYgKzIwMywxNSBAQAogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxDb21tb24uY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dp
bkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9k
dWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXERPTURlZmF1bHRJbXBsLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXFByaW50V2ViVUlEZWxlZ2F0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxzdGRhZnguY3BwIj4KICAgICAgIDxQcmVjb21waWxlZEhlYWRlciBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5D
cmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPgpAQCAtMjE5LDYgKzIyOCw4IEBACiAgICAgICA8UHJl
Y29tcGlsZWRIZWFkZXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z1N1ZmZpeHx4NjQnIj5DcmVhdGU8L1ByZWNvbXBpbGVkSGVhZGVyPgogICAgIDwvQ2xD
b21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cV2luTGF1bmNoZXIuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cV2luTGF1bmNoZXJXZWJIb3N0LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFdpbk1haW4uY3BwIiAvPgogICA8L0l0ZW1Hcm91cD4K
ICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZS5oIiAvPgpAQCAtMjI3LDYgKzIzOCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxzdGRhZnguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFdpbkxhdW5jaGVy
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxXaW5MYXVuY2hlclJlcGxhY2UuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFdpbkxhdW5jaGVyV2ViSG9zdC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iV2luTGF1bmNoZXJMaWJSZXNvdXJjZS5oIiAvPgogICA8
L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxh
dW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJMaWIu
dmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNzAyOTkpCisrKyBUb29scy9XaW5MYXVuY2hlci9X
aW5MYXVuY2hlci52Y3hwcm9qL1dpbkxhdW5jaGVyTGliLnZjeHByb2ouZmlsdGVycwkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsNiArMzcsMTggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFj
Y2Vzc2liaWxpdHlEZWxlZ2F0ZS5jcHAiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFdpbkxh
dW5jaGVyV2ViSG9zdC5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXERPTURlZmF1bHRJ
bXBsLmNwcCI+CisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xD
b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cV2luTWFpbi5jcHAiPgorICAgICAg
PEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXENvbW1vbi5jcHAiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmls
ZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3Jv
dXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxET01EZWZhdWx0SW1wbC5oIj4KQEAgLTYw
LDYgKzcyLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFdpbkxhdW5jaGVyUmVwbGFj
ZS5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxXaW5MYXVuY2hlcldlYkhvc3QuaCI+Cisg
ICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICA8
L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8UmVzb3VyY2VDb21waWxlIEluY2x1ZGU9
IldpbkxhdW5jaGVyTGliLnJjIj4K
</data>
<flag name="review"
          id="258153"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>