<?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>125094</bug_id>
          
          <creation_ts>2013-12-02 13:36:00 -0800</creation_ts>
          <short_desc>[Nix] Add other UIProcess files</short_desc>
          <delta_ts>2014-01-16 12:43:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          
          <blocked>117660</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Lauro Moura Maranhao Neto">lauro.neto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>955548</commentid>
    <comment_count>0</comment_count>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2013-12-02 13:36:00 -0800</bug_when>
    <thetext>Upstream other Nix UIProcess files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959288</commentid>
    <comment_count>1</comment_count>
      <attachid>219107</attachid>
    <who name="Daker Fernandes Pinheiro">daker.pinheiro</who>
    <bug_when>2013-12-12 12:09:52 -0800</bug_when>
    <thetext>Created attachment 219107
Add other UIProcess files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959289</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-12 12:11:12 -0800</bug_when>
    <thetext>Attachment 219107 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/nix/TextCheckerNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebContextNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebInspectorProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPopupMenuListenerNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPopupMenuListenerNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebProcessProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewClientNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewClientNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewNix.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.cpp:72:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h:34:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h:39:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h:46:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h:47:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h:49:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebViewClientNix.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewClientNix.cpp:49:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebKit2/UIProcess/nix/TextCheckerNix.cpp:132:  Could not find a newline character at the end of the file.  [whitespace/ending_newline] [5]
ERROR: Source/WebKit2/UIProcess/nix/TextCheckerNix.cpp:132:  There was more than one newline at the end of the file.  [whitespace/ending_newline] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebViewClientNix.h:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewClientNix.h:32:  wtf includes should be &lt;wtf/file.h&gt; instead of &quot;wtf/file.h&quot;.  [build/include] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewClientNix.h:50:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebKit2/UIProcess/nix/WebContextNix.cpp:29:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebContextNix.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:48:  The parameter name &quot;viewClient&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:50:  The parameter name &quot;point&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:93:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:93:  The parameter name &quot;pageGroup&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 26 in 13 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>959944</commentid>
    <comment_count>3</comment_count>
      <attachid>219280</attachid>
    <who name="Daker Fernandes Pinheiro">daker.pinheiro</who>
    <bug_when>2013-12-15 13:20:49 -0800</bug_when>
    <thetext>Created attachment 219280
Fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960035</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-16 05:29:04 -0800</bug_when>
    <thetext>Attachment 219280 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/nix/TextCheckerNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebContextMenuProxyNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebContextNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebInspectorProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPopupMenuListenerNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebPopupMenuListenerNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebProcessProxyNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewClientNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewClientNix.h&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewNix.cpp&apos;, u&apos;Source/WebKit2/UIProcess/nix/WebViewNix.h&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.cpp:73:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebPageProxyNix.cpp:33:  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: Source/WebKit2/UIProcess/nix/WebContextNix.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/UIProcess/nix/WebViewNix.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 13 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>962124</commentid>
    <comment_count>5</comment_count>
      <attachid>219280</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-20 17:19:20 -0800</bug_when>
    <thetext>Comment on attachment 219280
Fix style

Attachment 219280 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/48638318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968875</commentid>
    <comment_count>6</comment_count>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2014-01-16 12:43:23 -0800</bug_when>
    <thetext>Marking as invalid due to Nix upstream halting.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219107</attachid>
            <date>2013-12-12 12:09:52 -0800</date>
            <delta_ts>2013-12-15 13:20:49 -0800</delta_ts>
            <desc>Add other UIProcess files</desc>
            <filename>bug125094.diff</filename>
            <type>text/plain</type>
            <size>51037</size>
            <attacher name="Daker Fernandes Pinheiro">daker.pinheiro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1NWRjZmU4Li4xZjA2Y2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIx
IEBACisyMDEzLTEyLTEyICBEYWtlciBGZXJuYW5kZXMgUGluaGVpcm8gIDxkYWtlci5waW5oZWly
b0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtOaXhdIEFkZCBvdGhlciBVSVByb2Nlc3MgZmls
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTA5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL25peC9UZXh0Q2hlY2tlck5peC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxE
b2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxp
bmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJP
ZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVh
cm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE1lbnVQcm94eU5peC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6aGlkZUNvbnRleHRNZW51KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6V2ViQ29udGV4dE1lbnVQcm94
eU5peCk6CisgICAgICAgICogVUlQcm9jZXNzL25peC9XZWJDb250ZXh0Tml4LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OmluaXRJbnNwZWN0b3JTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHREYXRhYmFz
ZURpcmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVs
dEljb25EYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9y
bURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYkluc3BlY3RvclByb3h5Tml4LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3Rv
clBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNl
VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
VG9vbGJhckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1B
cHBlbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViUGFnZVByb3h5Tml4LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmluaXRpYWxpemVVSVBvcHVwTWVudUNsaWVudCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL25peC9XZWJQb3B1cE1lbnVMaXN0ZW5lck5peC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5peDo6V2ViUG9wdXBNZW51
TGlzdGVuZXJOaXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5peDo6
dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlBvcHVwTWVudUxpc3Rl
bmVyTml4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5p
eDo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlByb2Nlc3NQcm94eU5peC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0
TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRvbmVXaXRo
VG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRpZEZpbmRa
b29tYWJsZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Tml4OjpzZXRDdXJz
b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Tml4Ojp1cGRhdGVUZXh0SW5wdXRT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRpZENoYW5nZVRvb2x0
aXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViVmlld0NsaWVudE5peC5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6
V2ViVmlld05peCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldEN1cnNvcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldE5peFZpZXdDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdOaXg6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6
c2VuZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kS2V5RXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kR2VzdHVyZUV2ZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6dmlld3BvcnRJbnRlcmFjdGlvblN0YXJ0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6dmlld3BvcnRJbnRlcmFjdGlvblN0b3ApOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdOaXg6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkQ2hhbmdlUGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkQ2hhbmdlQ29udGVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkRmluZFpvb21hYmxlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdO
aXg6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Tml4OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Tml4Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4
Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6bm90aWZ5
TG9hZElzQmFja0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRTdGFy
dGVkTWFpbkZyYW1lTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6YWRqdXN0
U2NhbGVUb0ZpdENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6c2NhbGVU
b0ZpdENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6c2V0QXV0b1NjYWxl
VG9GaXRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldFNjcmVlblJl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViVmlld05peC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld05peDo6aXNTdXNwZW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Tml4OjpwZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld05peDo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorCiAyMDEzLTEyLTEyICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBQcmVw
ZW5kIHRoZSBXZWJDb3JlIGxheWVyIGFyY2hpdmVzJyBuYW1lcyB3aXRoICdsaWInCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1RleHRDaGVja2VyTml4LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvVGV4dENoZWNrZXJOaXguY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmJjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1RleHRDaGVja2VyTml4LmNwcApAQCAtMCwwICsxLDEz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgVGV4dENoZWNrZXJTdGF0
ZSB0ZXh0Q2hlY2tlclN0YXRlOworCitjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRleHRDaGVj
a2VyU3RhdGU7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdBbGxvd2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVs
bERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyhpbnQ2NF90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQz
Ml90LCBpbnQzMl90JiwgaW50MzJfdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNo
YXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYs
IGludDMyX3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgVGV4dENoZWNr
ZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNT
aG93aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVX
b3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxU
ZXh0Q2hlY2tlckNvbXBsZXRpb24+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvbml4L1dlYkNvbnRleHRNZW51UHJveHlOaXguaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9uaXgvV2ViQ29udGV4dE1lbnVQcm94eU5peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjMyYWI1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvbml4L1dlYkNvbnRleHRNZW51UHJveHlOaXguaApAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQ29udGV4dE1lbnVQcm94eU5p
eF9oCisjZGVmaW5lIFdlYkNvbnRleHRNZW51UHJveHlOaXhfaAorCisjaWYgRU5BQkxFKENPTlRF
WFRfTUVOVVMpCisKKworI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlL0NvbnRleHRNZW51LmgiCisjaW5jbHVkZSAid3RmL1JlZlB0ci5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eU5peCA6IHB1YmxpYyBX
ZWJDb250ZXh0TWVudVByb3h5Cit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
Q29udGV4dE1lbnVQcm94eU5peD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eU5peCk7CisgICAgfQorCisgICAgdm9pZCBzaG93
Q29udGV4dE1lbnUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4mKSB7fQorICAgIHZvaWQgaGlkZUNvbnRleHRNZW51KCkge30KK3By
aXZhdGU6CisgICAgV2ViQ29udGV4dE1lbnVQcm94eU5peCgpIHt9Cit9OworCit9CisjZW5kaWYK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYkNv
bnRleHROaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJDb250ZXh0Tml4
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTIyYWI0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJDb250ZXh0Tml4LmNw
cApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90
b3JvbGEgTW9iaWxpdHksIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKworI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JTZXJ2ZXIu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIHZvaWQgaW5pdEluc3Bl
Y3RvclNlcnZlcigpCit7CisjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCisgICAgc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBTdHJpbmcgZW52U3RyKGdf
Z2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1NFUlZFUiIpKTsKKworICAgIGlmICghZW52U3RyLmlz
TnVsbCgpKSB7CisgICAgICAgIFN0cmluZyBiaW5kQWRkcmVzcyA9ICIxMjcuMC4wLjEiOworICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gMjU1NTU7CisKKyAgICAgICAgVmVjdG9yPFN0cmlu
Zz4gcmVzdWx0OworICAgICAgICBlbnZTdHIuc3BsaXQoIjoiLCByZXN1bHQpOworCisgICAgICAg
IGlmIChyZXN1bHQuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgICAgIGJpbmRBZGRyZXNzID0gcmVz
dWx0WzBdOworICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOworICAgICAgICAgICAgcG9ydCA9
IHJlc3VsdFsxXS50b0ludCgmb2spOworICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAg
ICAgICBwb3J0ID0gMjk5OTsKKyAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6
OnNoYXJlZCgpLmxpc3RlbihiaW5kQWRkcmVzcywgcG9ydCk7CisgICAgfQorI2VuZGlmCit9CisK
K1N0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KCkgY29uc3QKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBjYWNoZURpcmVjdG9yeShnX2J1aWxk
X2ZpbGVuYW1lKGdfZ2V0X3VzZXJfY2FjaGVfZGlyKCksICJ3ZWJraXRuaXgiLCAiYXBwbGljYXRp
b25zIiwgTlVMTCkpOworICAgIHJldHVybiBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGNhY2hl
RGlyZWN0b3J5LmdldCgpKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxp
emVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7
CisgICAgaW5pdEluc3BlY3RvclNlcnZlcigpOworCisjaWYgVVNFKFNPVVApCisgICAgcGFyYW1l
dGVycy5pZ25vcmVUTFNFcnJvcnMgPSBmYWxzZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBh
cmFtZXRlcnMpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1JbnZhbGlk
YXRlQ29udGV4dCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkNv
bnRleHQ6OnBsYXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBH
T3duUHRyPGdjaGFyPiBkYXRhYmFzZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3Vz
ZXJfZGF0YV9kaXIoKSwgIndlYmtpdG5peCIsICJkYXRhYmFzZXMiLCBOVUxMKSk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoZGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOwor
fQorCitTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkoKSBjb25zdAoreworICAgIEdPd25QdHI8Z2NoYXI+IHN0b3JhZ2VEaXJlY3RvcnkoZ19idWls
ZF9maWxlbmFtZShnX2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXRuaXgiLCAibG9jYWxzdG9y
YWdlIiwgTlVMTCkpOworICAgIHJldHVybiBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHN0b3Jh
Z2VEaXJlY3RvcnkuZ2V0KCkpOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZh
dWx0RGlza0NhY2hlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBkaXNr
Q2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2NhY2hlX2RpcigpLCAi
d2Via2l0bml4IiwgImNhY2hlIiwgTlVMTCkpOworICAgIHJldHVybiBXZWJDb3JlOjpmaWxlbmFt
ZVRvU3RyaW5nKGRpc2tDYWNoZURpcmVjdG9yeS5nZXQoKSk7Cit9CisKK1N0cmluZyBXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAg
ICBHT3duUHRyPGdjaGFyPiBjb29raWVTdG9yYWdlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUo
Z19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0bml4IiwgImNvb2tpZXMiLCBOVUxMKSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcoY29va2llU3RvcmFnZURpcmVjdG9y
eS5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJJbnNwZWN0b3JQcm94eU5peC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYkluc3BlY3RvclByb3h5Tml4LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQ3N2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJJbnNwZWN0b3JQcm94eU5peC5jcHAKQEAgLTAs
MCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZVByb3h5KiBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybU9wZW4oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1CcmluZ1RvRnJvbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2ln
bmVkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdp
bmRvd0hlaWdodCh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWdu
ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRUb29s
YmFySGVpZ2h0KHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmLCBib29sLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL25peC9XZWJQYWdlUHJveHlOaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL25peC9XZWJQYWdlUHJveHlOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY2YjczMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3Mvbml4L1dlYlBhZ2VQcm94eU5peC5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KworI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIldlYlBhZ2VNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5o
IgorI2luY2x1ZGUgIldlYktpdFZlcnNpb24uaCIKKworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCisjZGVmaW5lIFNUUklOR0ZZ
KFZBTFVFKSAjVkFMVUUKKyNkZWZpbmUgR0VUX1dFQktJVF9WRVJTSU9OKE1BSk9SLCBNSU5PUikg
U1RSSU5HRlkoTUFKT1IpICIuIiBTVFJJTkdGWShNSU5PUikKKyNkZWZpbmUgVUFfV0VCS0lUX1ZF
UlNJT04gR0VUX1dFQktJVF9WRVJTSU9OKFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlO
T1JfVkVSU0lPTikKKworI2lmIFBMQVRGT1JNKFgxMSkKKyNkZWZpbmUgVUFfUExBVEZPUk0gIlgx
MSIKKyNlbHNlCisjZGVmaW5lIFVBX1BMQVRGT1JNICJVbmtub3duIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitTdHJpbmcgV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChj
b25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTmFtZSkKK3sKKyAgICBXVEY6OlN0cmluZyBvc1ZlcnNp
b247CisKKyAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOworICAgIGlmICh1bmFtZSgmbmFtZSkgIT0g
LTEpCisgICAgICAgIG9zVmVyc2lvbiA9IFdURjo6U3RyaW5nKG5hbWUuc3lzbmFtZSkgKyAiICIg
KyBXVEY6OlN0cmluZyhuYW1lLm1hY2hpbmUpOworICAgIGVsc2UKKyAgICAgICAgb3NWZXJzaW9u
ID0gIlVua25vd24iOworCisgICAgV1RGOjpTdHJpbmdCdWlsZGVyIHVzZXJBZ2VudDsKKyAgICB1
c2VyQWdlbnQuYXBwZW5kTGl0ZXJhbCgiTW96aWxsYS81LjAgKCIgVUFfUExBVEZPUk0gIjsgIik7
CisgICAgdXNlckFnZW50LmFwcGVuZChvc1ZlcnNpb24pOworICAgIHVzZXJBZ2VudC5hcHBlbmRM
aXRlcmFsKCIpIEFwcGxlV2ViS2l0LyIgVUFfV0VCS0lUX1ZFUlNJT04gIiAoS0hUTUwsIGxpa2Ug
R2Vja28pIik7CisgICAgaWYgKCFhcHBsaWNhdGlvbk5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAg
IHVzZXJBZ2VudC5hcHBlbmRMaXRlcmFsKCIgIik7CisgICAgICAgIHVzZXJBZ2VudC5hcHBlbmQo
YXBwbGljYXRpb25OYW1lKTsKKyAgICB9CisgICAgdXNlckFnZW50LmFwcGVuZExpdGVyYWwoIiBT
YWZhcmkvIiBVQV9XRUJLSVRfVkVSU0lPTik7CisKKyAgICByZXR1cm4gdXNlckFnZW50LnRvU3Ry
aW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQorewor
fQorCit2b2lkIFdlYlBhZ2VQcm94eTo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChWZWN0
b3I8V1RGOjpTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdl
YlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQ
cm94eTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlh
bGl6ZVVJUG9wdXBNZW51Q2xpZW50KGNvbnN0IFdLUGFnZVVJUG9wdXBNZW51Q2xpZW50QmFzZSog
Y2xpZW50KQoreworICAgIG1fdWlQb3B1cE1lbnVDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9uaXgvV2ViUG9wdXBNZW51TGlzdGVuZXJOaXguY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL25peC9XZWJQb3B1cE1lbnVMaXN0ZW5lck5peC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmYjFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViUG9wdXBNZW51TGlzdGVuZXJOaXguY3BwCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51TGlzdGVuZXJOaXguaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1dlYlBvcHVwTWVudUxpc3RlbmVyTml4OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5p
eChXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50KiBjbGllbnQpCisgICAgOiBXZWJQb3B1cE1lbnVQ
cm94eShjbGllbnQpCit7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51TGlzdGVuZXJOaXg6OnZhbHVl
Q2hhbmdlZChpbnQgbmV3U2VsZWN0ZWRJbmRleCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KHRo
aXMsIG5ld1NlbGVjdGVkSW5kZXgpOworICAgIGludmFsaWRhdGUoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dl
YlBvcHVwTWVudUxpc3RlbmVyTml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dl
YlBvcHVwTWVudUxpc3RlbmVyTml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTkxZjgwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9u
aXgvV2ViUG9wdXBNZW51TGlzdGVuZXJOaXguaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQb3B1cE1lbnVMaXN0ZW5lck5peF9oCisj
ZGVmaW5lIFdlYlBvcHVwTWVudUxpc3RlbmVyTml4X2gKKworI2luY2x1ZGUgIldlYlBvcHVwTWVu
dVByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQb3B1cE1lbnVMaXN0
ZW5lck5peCA6IHB1YmxpYyBXZWJQb3B1cE1lbnVQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51TGlzdGVuZXJOaXg+IGNyZWF0ZShXZWJQb3B1cE1lbnVQ
cm94eTo6Q2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYlBvcHVwTWVudUxpc3RlbmVyTml4KGNsaWVudCkpOworICAgIH0KKworICAgIHZvaWQgdmFs
dWVDaGFuZ2VkKGludCBuZXdTZWxlY3RlZEluZGV4KTsKKworcHJpdmF0ZToKKyAgICBXZWJQb3B1
cE1lbnVMaXN0ZW5lck5peChXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50Kik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlBvcHVwTWVudUxpc3RlbmVyTml4X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViUHJvY2Vzc1Byb3h5
Tml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViUHJvY2Vzc1Byb3h5Tml4
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWE5Y2ZjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJQcm9jZXNzUHJveHlO
aXguY3BwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2
b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVu
Y2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucykKK3sKKyNpZm5kZWYgTkRFQlVHCisg
ICAgY29uc3QgY2hhciogd2ViUHJvY2Vzc0NtZFByZWZpeCA9IGdldGVudigiV0VCX1BST0NFU1Nf
Q01EX1BSRUZJWCIpOworICAgIGlmICh3ZWJQcm9jZXNzQ21kUHJlZml4ICYmICp3ZWJQcm9jZXNz
Q21kUHJlZml4KQorICAgICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NDbWRQcmVmaXggPSBTdHJp
bmc6OmZyb21VVEY4KHdlYlByb2Nlc3NDbWRQcmVmaXgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0obGF1bmNoT3B0aW9ucyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdDbGllbnROaXgu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmE4ZTA5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmNwcApA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdDbGllbnROaXguaCIKKworI2luY2x1ZGUgIldl
YlZpZXdOaXguaCIKKyNpbmNsdWRlICJFZGl0b3JTdGF0ZS5oIgorI2luY2x1ZGUgPGNzdHJpbmc+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlZpZXdDbGllbnROaXg6OmRvbmVXaXRo
VG91Y2hFdmVudChXZWJWaWV3KiB2aWV3LCBjb25zdCBOSVhUb3VjaEV2ZW50JiBldmVudCwgYm9v
bCB3YXNFdmVudEhhbmRsZWQpCit7CisgICAgaWYgKCFtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZl
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQodG9B
UEkodmlldyksICZldmVudCwgd2FzRXZlbnRIYW5kbGVkLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnROaXg6OmRpZEZpbmRab29tYWJsZUFyZWEoV2Vi
VmlldyogdmlldywgV0tQb2ludCB0YXJnZXQsIFdLUmVjdCBhcmVhKQoreworICAgIGlmICghbV9j
bGllbnQuZGlkRmluZFpvb21hYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xpZW50
LmRpZEZpbmRab29tYWJsZUFyZWEodG9BUEkodmlldyksIHRhcmdldCwgYXJlYSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50Tml4OjpzZXRDdXJzb3Io
V2ViVmlldyogdmlldywgdW5zaWduZWQgaW50IHNoYXBlKQoreworICAgIGlmICghbV9jbGllbnQu
c2V0Q3Vyc29yKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGllbnQuc2V0Q3Vyc29yKHRvQVBJ
KHZpZXcpLCBzaGFwZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJW
aWV3Q2xpZW50Tml4Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZShXZWJWaWV3KiB2aWV3LCBjb25zdCBF
ZGl0b3JTdGF0ZSYgc3RhdGUpCit7CisgICAgaWYgKCFtX2NsaWVudC51cGRhdGVUZXh0SW5wdXRT
dGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTklYVGV4dElucHV0U3RhdGUgbml4U3RhdGU7
CisgICAgUHJveHlpbmdSZWZQdHI8V2ViU3RyaW5nPiBzZWxlY3RlZFRleHQgPSB0b0FQSShzdGF0
ZS5zZWxlY3RlZFRleHQuaW1wbCgpKTsKKyAgICBQcm94eWluZ1JlZlB0cjxXZWJTdHJpbmc+IHN1
cnJvdW5kaW5nVGV4dCA9IHRvQVBJKHN0YXRlLnN1cnJvdW5kaW5nVGV4dC5pbXBsKCkpOworICAg
IFByb3h5aW5nUmVmUHRyPFdlYlN0cmluZz4gc3VibWl0TGFiZWwgPSB0b0FQSShzdGF0ZS5zdWJt
aXRMYWJlbC5pbXBsKCkpOworCisgICAgbml4U3RhdGUuc2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRU
ZXh0OworICAgIG5peFN0YXRlLnN1cnJvdW5kaW5nVGV4dCA9IHN1cnJvdW5kaW5nVGV4dDsKKyAg
ICBuaXhTdGF0ZS5zdWJtaXRMYWJlbCA9IHN1Ym1pdExhYmVsOworICAgIG5peFN0YXRlLmlucHV0
TWV0aG9kSGludHMgPSBzdGF0ZS5pbnB1dE1ldGhvZEhpbnRzOworICAgIG5peFN0YXRlLmlzQ29u
dGVudEVkaXRhYmxlID0gc3RhdGUuaXNDb250ZW50RWRpdGFibGU7CisgICAgbml4U3RhdGUuY3Vy
c29yUG9zaXRpb24gPSBzdGF0ZS5jdXJzb3JQb3NpdGlvbjsKKyAgICBuaXhTdGF0ZS5hbmNob3JQ
b3NpdGlvbiA9IHN0YXRlLmFuY2hvclBvc2l0aW9uOworICAgIG5peFN0YXRlLmN1cnNvclJlY3Qg
PSB0b0FQSShzdGF0ZS5jdXJzb3JSZWN0KTsKKyAgICBuaXhTdGF0ZS5lZGl0b3JSZWN0ID0gdG9B
UEkoc3RhdGUuZWRpdG9yUmVjdCk7CisKKyAgICBtX2NsaWVudC51cGRhdGVUZXh0SW5wdXRTdGF0
ZSh0b0FQSSh2aWV3KSwgJm5peFN0YXRlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworfQor
Cit2b2lkIFdlYlZpZXdDbGllbnROaXg6OmRpZENoYW5nZVRvb2x0aXAoV2ViVmlldyogdmlldywg
Y29uc3QgV0tTdHJpbmdSZWYgdG9vbHRpcCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENoYW5n
ZVRvb2x0aXApCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VUb29sdGlw
KHRvQVBJKHZpZXcpLCB0b29sdGlwLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9uaXgvV2ViVmlld0NsaWVudE5peC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9X
ZWJWaWV3Q2xpZW50Tml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3
OTBmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2Vi
Vmlld0NsaWVudE5peC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlZpZXdDbGllbnROaXhfaAorI2RlZmluZSBXZWJWaWV3Q2xpZW50
Tml4X2gKKworI2luY2x1ZGUgIkFQSUNsaWVudC5oIgorI2luY2x1ZGUgIk5JWFZpZXcuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAid3RmL3RleHQvV1RGU3RyaW5nLmgiCisKK25h
bWVzcGFjZSBBUEkgewordGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPE5JWFZpZXdDbGll
bnRCYXNlPiB7CisgICAgdHlwZWRlZiBzdGQ6OnR1cGxlPE5JWFZpZXdDbGllbnRWMD4gVmVyc2lv
bnM7Cit9OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldzsKK3N0cnVj
dCBFZGl0b3JTdGF0ZTsKKworY2xhc3MgV2ViVmlld0NsaWVudE5peCA6IHB1YmxpYyBBUEk6OkNs
aWVudDxOSVhWaWV3Q2xpZW50QmFzZT4geworcHVibGljOgorICAgIHZvaWQgZG9uZVdpdGhUb3Vj
aEV2ZW50KFdlYlZpZXcqLCBjb25zdCBOSVhUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRs
ZWQpOworICAgIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShXZWJWaWV3KiwgV0tQb2ludCB0YXJn
ZXQsIFdLUmVjdCBhcmVhKTsKKyAgICB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKFdlYlZpZXcq
LCBjb25zdCBFZGl0b3JTdGF0ZSYpOworICAgIHZvaWQgc2V0Q3Vyc29yKFdlYlZpZXcqLCB1bnNp
Z25lZCBpbnQpOworICAgIHZvaWQgZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiwgY29uc3QgV0tT
dHJpbmdSZWYgdG9vbHRpcCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYlZpZXdDbGllbnROaXhfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL25peC9XZWJWaWV3Tml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2Vi
Vmlld05peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4ZTM4ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViVmlld05p
eC5jcHAKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlld05peC5oIgorCisjaW5j
bHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHkuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5o
IgorI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOYXRpdmVX
ZWJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgorI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJFdmVudC5oIgorI2luY2x1ZGUgIldlYkV2
ZW50RmFjdG9yeU5peC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldl
YlBvcHVwTWVudUxpc3RlbmVyTml4LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dHVyZU1hcHBlckdMLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc1JlZlB0cjxXZWJW
aWV3PiBXZWJWaWV3OjpjcmVhdGUoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBw
YWdlR3JvdXApCit7CisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAzNSwgMCkKKyAgICBnX3R5
cGVfaW5pdCgpOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJWaWV3Tml4KGNv
bnRleHQsIHBhZ2VHcm91cCkpOworfQorCitXZWJWaWV3Tml4OjpXZWJWaWV3Tml4KFdlYkNvbnRl
eHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQorICAgIDogV2ViVmlldyhjb250
ZXh0LCBwYWdlR3JvdXApCisgICAgLCBtX2FjdGl2ZUNvbnRleHRNZW51KFdlYkNvbnRleHRNZW51
UHJveHlOaXg6OmNyZWF0ZSgpKQorICAgICwgbV9kdXJpbmdGcmFtZVJlbmRlcmluZyhmYWxzZSkK
KyAgICAsIG1fcGVuZGluZ1NjYWxlT3JQb3NpdGlvbkNoYW5nZShmYWxzZSkKKyAgICAsIG1fc2Nh
bGVBZnRlclRyYW5zaXRpb24oMS4wKQorICAgICwgbV9sb2FkSXNCYWNrRm9yd2FyZChmYWxzZSkK
KyAgICAsIG1fYWRqdXN0U2NhbGVBZnRlckZpcnN0TWFpbkZyYW1lUmVuZGVyKGZhbHNlKQorICAg
ICwgbV9hdXRvU2NhbGVUb0ZpdENvbnRlbnRzKHRydWUpCit7Cit9CisKK3ZvaWQgV2ViVmlld05p
eDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKSB7CisgICAgdW5zaWdu
ZWQgaW50IHNoYXBlID0gY3Vyc29yLnBsYXRmb3JtQ3Vyc29yKCk7CisgICAgbV92aWV3Q2xpZW50
Tml4LnNldEN1cnNvcih0aGlzLCBzaGFwZSk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6c2V0Tml4
Vmlld0NsaWVudChjb25zdCBOSVhWaWV3Q2xpZW50QmFzZSogdmlld0NsaWVudCkKK3sKKyAgICBt
X3ZpZXdDbGllbnROaXguaW5pdGlhbGl6ZSh2aWV3Q2xpZW50KTsKK30KKwordm9pZCBXZWJWaWV3
Tml4OjpzZW5kTW91c2VFdmVudChjb25zdCBOSVhNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBw
YWdlKCktPmhhbmRsZU1vdXNlRXZlbnQoTmF0aXZlV2ViTW91c2VFdmVudChldmVudCwgJm1fbGFz
dEN1cnNvclBvc2l0aW9uKSk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6c2VuZFRvdWNoRXZlbnQo
Y29uc3QgTklYVG91Y2hFdmVudCYgZXZlbnQpCit7CisgICAgcGFnZSgpLT5oYW5kbGVUb3VjaEV2
ZW50KE5hdGl2ZVdlYlRvdWNoRXZlbnQoZXZlbnQpKTsKK30KKwordm9pZCBXZWJWaWV3Tml4Ojpz
ZW5kV2hlZWxFdmVudChjb25zdCBOSVhXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBwYWdlKCkt
PmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudChldmVudCkpOworfQorCit2b2lk
IFdlYlZpZXdOaXg6OnNlbmRLZXlFdmVudChjb25zdCBOSVhLZXlFdmVudCYgZXZlbnQpCit7Cisg
ICAgcGFnZSgpLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZl
bnQpKTsKK30KKwordm9pZCBXZWJWaWV3Tml4OjpzZW5kR2VzdHVyZUV2ZW50KGNvbnN0IE5JWEdl
c3R1cmVFdmVudCYgZXZlbnQpCit7CisgICAgV2ViUGxhdGZvcm1Ub3VjaFBvaW50IHBvaW50KDAs
IFdlYlBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hQcmVzc2VkLCBJbnRQb2ludChldmVudC5nbG9i
YWxYLCBldmVudC5nbG9iYWxZKSwKKyAgICBJbnRQb2ludChldmVudC54LCBldmVudC55KSwgSW50
U2l6ZShldmVudC53aWR0aCwgZXZlbnQuaGVpZ2h0KSk7CisgICAgcGFnZSgpLT5oYW5kbGVTaW5n
bGVUYXAoZXZlbnQudGltZXN0YW1wLCBwb2ludCk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6Zmlu
ZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdLUG9pbnQmIHBvaW50LCBpbnQgaG9yaXpvbnRh
bFJhZGl1cywgaW50IHZlcnRpY2FsUmFkaXVzKQoreworICAgIEludFBvaW50IGNvbnRlbnRzUG9p
bnQocG9pbnQueCwgcG9pbnQueSk7CisgICAgSW50U2l6ZSB0b3VjaFNpemUoaG9yaXpvbnRhbFJh
ZGl1cyAqIDIsIHZlcnRpY2FsUmFkaXVzICogMik7CisgICAgcGFnZSgpLT5maW5kWm9vbWFibGVB
cmVhRm9yUG9pbnQoY29udGVudHNQb2ludCwgdG91Y2hTaXplKTsKK30KKwordm9pZCBXZWJWaWV3
Tml4Ojp2aWV3cG9ydEludGVyYWN0aW9uU3RhcnQoKQoreworICAgIHN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnZpZXdwb3J0SW50
ZXJhY3Rpb25TdG9wKCkKK3sKKyAgICBpZiAocGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKSAhPSBj
b250ZW50U2NhbGVGYWN0b3IoKSkKKyAgICAgICAgcGFnZSgpLT5zY2FsZVBhZ2UoY29udGVudFNj
YWxlRmFjdG9yKCksIHJvdW5kZWRJbnRQb2ludChjb250ZW50UG9zaXRpb24oKSkpOworICAgIHVw
ZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAgIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKCk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAg
ICBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKS0+c2V0QWN0aXZlKHRydWUpOworICAgIG1fY2xp
ZW50LndlYlByb2Nlc3NEaWRSZWxhdW5jaCh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3Tml4Ojpk
aWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCit7CisgICAgaWYg
KGlzU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlKCktPnNjYWxlUGFnZShz
Y2FsZUZhY3Rvciwgcm91bmRlZEludFBvaW50KGNvbnRlbnRQb3NpdGlvbigpKSk7CisgICAgdXBk
YXRlVmlld3BvcnRTaXplKCk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6cGFnZURpZFJlcXVlc3RT
Y3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIGlmIChtX2R1cmluZ0ZyYW1l
UmVuZGVyaW5nICYmIChtX3BlbmRpbmdTY2FsZU9yUG9zaXRpb25DaGFuZ2UgfHwgcG9zaXRpb24g
IT0gbV9jb250ZW50UG9zaXRpb24pKSB7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlT3JQb3NpdGlv
bkNoYW5nZSA9IHRydWU7CisgICAgICAgIG1fY29udGVudFBvc2l0aW9uQWZ0ZXJUcmFuc2l0aW9u
ID0gcG9zaXRpb247CisgICAgfSBlbHNlCisgICAgICAgIFdlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3Tml4OjpkaWRSZW5kZXJGcmFtZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNvdmVyZWRSZWN0KQoreworICAgIG1fZHVyaW5nRnJhbWVSZW5kZXJpbmcgPSBmYWxzZTsK
KyAgICBpZiAobV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlKSB7CisgICAgICAgIG1fcGVu
ZGluZ1NjYWxlT3JQb3NpdGlvbkNoYW5nZSA9IGZhbHNlOworICAgICAgICBpZiAobV9zY2FsZUFm
dGVyVHJhbnNpdGlvbiAhPSBtX2NvbnRlbnRTY2FsZUZhY3RvcikKKyAgICAgICAgICAgIG1fY29u
dGVudFNjYWxlRmFjdG9yID0gbV9zY2FsZUFmdGVyVHJhbnNpdGlvbjsKKworICAgICAgICBpZiAo
bV9jb250ZW50UG9zaXRpb24gIT0gbV9jb250ZW50UG9zaXRpb25BZnRlclRyYW5zaXRpb24pCisg
ICAgICAgICAgICBzZXRDb250ZW50UG9zaXRpb24obV9jb250ZW50UG9zaXRpb25BZnRlclRyYW5z
aXRpb24pOworICAgIH0KKworICAgIGlmIChtX2FkanVzdFNjYWxlQWZ0ZXJGaXJzdE1haW5GcmFt
ZVJlbmRlcikgeworICAgICAgICBtX2FkanVzdFNjYWxlQWZ0ZXJGaXJzdE1haW5GcmFtZVJlbmRl
ciA9IGZhbHNlOworICAgICAgICBhZGp1c3RTY2FsZVRvRml0Q29udGVudHMoKTsKKyAgICB9CisK
KyAgICBXZWJWaWV3OjpkaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsK
K30KKwordm9pZCBXZWJWaWV3Tml4OjpkaWRDaGFuZ2VQYWdlU2NhbGVGYWN0b3IoZG91YmxlIHNj
YWxlRmFjdG9yKQoreworICAgIGlmIChtX2R1cmluZ0ZyYW1lUmVuZGVyaW5nICYmIChtX3BlbmRp
bmdTY2FsZU9yUG9zaXRpb25DaGFuZ2UgfHwgc2NhbGVGYWN0b3IgIT0gbV9jb250ZW50U2NhbGVG
YWN0b3IpKSB7CisgICAgICAgIG1fcGVuZGluZ1NjYWxlT3JQb3NpdGlvbkNoYW5nZSA9IHRydWU7
CisgICAgICAgIG1fc2NhbGVBZnRlclRyYW5zaXRpb24gPSBzY2FsZUZhY3RvcjsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9jb250ZW50U2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKK30KKwordm9p
ZCBXZWJWaWV3Tml4OjpkaWRDaGFuZ2VDb250ZW50UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6Rmxv
YXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBDb29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhID0gcmVpbnRlcnByZXRfY2FzdDxDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHkqPihwYWdlKCktPmRyYXdpbmdBcmVhKCkpOworICAgIGlmICghZHJhd2luZ0FyZWEp
CisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdChjb250
ZW50UG9zaXRpb24oKSwgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpKTsKKyAgICB2aXNpYmxlQ29udGVu
dHNSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZW50c1NpemUoKSkp
OworICAgIGRyYXdpbmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50
c1JlY3QsIHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OmRpZEZpbmRa
b29tYWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHRhcmdldCwgY29uc3QgSW50UmVjdCYgYXJlYSkK
K3sKKyAgICBtX3ZpZXdDbGllbnROaXguZGlkRmluZFpvb21hYmxlQXJlYSh0aGlzLCB0b0FQSSh0
YXJnZXQpLCB0b0FQSShhcmVhKSk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6ZGlkQ29tbWl0TG9h
ZEZvck1haW5GcmFtZSgpCit7CisgICAgbV9kdXJpbmdGcmFtZVJlbmRlcmluZyA9IHRydWU7Cisg
ICAgbV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlID0gZmFsc2U7CisgICAgbV9jb250ZW50
UG9zaXRpb25BZnRlclRyYW5zaXRpb24gPSBXZWJDb3JlOjpGbG9hdFBvaW50KCk7CisgICAgbV9z
Y2FsZUFmdGVyVHJhbnNpdGlvbiA9IDEuMDsKK30KKwordm9pZCBXZWJWaWV3Tml4OjpwYWdlVHJh
bnNpdGlvblZpZXdwb3J0UmVhZHkoKQoreworICAgIHBhZ2UoKS0+Y29tbWl0UGFnZVRyYW5zaXRp
b25WaWV3cG9ydCgpOyAvLyBGSVhNRTogaXMgdGhpcyBjb3JyZWN0L25lZWRlZD8KKyAgICBtX2Ns
aWVudC5kaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uKHRoaXMpOyAvLyBGSVhNRTogaXMgdGhpcyBj
b3JyZWN0L25lZWRlZD8KK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFdlYlZp
ZXdOaXg6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVu
dCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCit7CisgICAgbV92aWV3Q2xpZW50Tml4LmRvbmVXaXRo
VG91Y2hFdmVudCh0aGlzLCAqZXZlbnQubmF0aXZlRXZlbnQoKSwgd2FzRXZlbnRIYW5kbGVkKTsK
K30KKyNlbmRpZgorCit2b2lkIFdlYlZpZXdOaXg6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKK3sK
KyAgICBtX3ZpZXdDbGllbnROaXgudXBkYXRlVGV4dElucHV0U3RhdGUodGhpcywgcGFnZSgpLT5l
ZGl0b3JTdGF0ZSgpKTsKK30KKworCitQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBXZWJW
aWV3Tml4OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAg
cmV0dXJuIFdlYlBvcHVwTWVudUxpc3RlbmVyTml4OjpjcmVhdGUocGFnZSk7Cit9CisKK3ZvaWQg
V2ViVmlld05peDo6bm90aWZ5TG9hZElzQmFja0ZvcndhcmQoKQoreworICAgIG1fbG9hZElzQmFj
a0ZvcndhcmQgPSB0cnVlOworfQorCit2b2lkIFdlYlZpZXdOaXg6OmRpZFN0YXJ0ZWRNYWluRnJh
bWVMYXlvdXQoKQoreworICAgIGlmIChtX2xvYWRJc0JhY2tGb3J3YXJkIHx8IG1fcGVuZGluZ1Nj
YWxlT3JQb3NpdGlvbkNoYW5nZSkgeworICAgICAgICBpZiAobV9hdXRvU2NhbGVUb0ZpdENvbnRl
bnRzICYmICFtX2xvYWRJc0JhY2tGb3J3YXJkICYmIG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkK
KyAgICAgICAgICAgIG1fYWRqdXN0U2NhbGVBZnRlckZpcnN0TWFpbkZyYW1lUmVuZGVyID0gdHJ1
ZTsKKworICAgICAgICBtX2xvYWRJc0JhY2tGb3J3YXJkID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld05peDo6YWRqdXN0U2NhbGVUb0ZpdENvbnRlbnRz
KCkKK3sKKyAgICBmbG9hdCBzY2FsZSA9IHNjYWxlVG9GaXRDb250ZW50cygpOworICAgIHNldENv
bnRlbnRTY2FsZUZhY3RvcihzY2FsZSk7Cit9CisKK2Zsb2F0IFdlYlZpZXdOaXg6OnNjYWxlVG9G
aXRDb250ZW50cygpCit7CisgICAgcmV0dXJuIHNpemUoKS53aWR0aCgpIC8gKG1fY29udGVudHNT
aXplLndpZHRoKCkgKiBkZXZpY2VTY2FsZUZhY3RvcigpKTsKK30KKwordm9pZCBXZWJWaWV3Tml4
OjpzZXRBdXRvU2NhbGVUb0ZpdENvbnRlbnRzKGJvb2wgZW5hYmxlKQoreworICAgIG1fYXV0b1Nj
YWxlVG9GaXRDb250ZW50cyA9IGVuYWJsZTsKKyAgICBpZiAoIW1fYXV0b1NjYWxlVG9GaXRDb250
ZW50cykKKyAgICAgICAgbV9hZGp1c3RTY2FsZUFmdGVyRmlyc3RNYWluRnJhbWVSZW5kZXIgPSBm
YWxzZTsKK30KKwordm9pZCBXZWJWaWV3Tml4OjpzZXRTY3JlZW5SZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3BhZ2UtPnNldFNjcmVlblJlY3QocmVjdCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL25peC9XZWJWaWV3Tml4LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dl
YlZpZXdOaXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWU3OTg0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJWaWV3Tml4
LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlZpZXdOaXhfaAorI2RlZmluZSBXZWJWaWV3Tml4X2gKKworI2luY2x1ZGUgIk5JWFZp
ZXcuaCIKKyNpbmNsdWRlICJOSVhFdmVudHMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllci5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlOaXguaCIKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudE5peC5oIgorI2luY2x1ZGUg
IldlYlBvcHVwSXRlbVBsYXRmb3JtLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBNZW51TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9DdXJzb3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmll
d05peCA6IHB1YmxpYyBXZWJWaWV3IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldE5peFZpZXdDbGll
bnQoY29uc3QgTklYVmlld0NsaWVudEJhc2UqIHZpZXdDbGllbnQpOworCisgICAgdm9pZCBmaW5k
Wm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV0tQb2ludCYgcG9pbnQsIGludCBob3Jpem9udGFs
UmFkaXVzLCBpbnQgdmVydGljYWxSYWRpdXMpOworCisgICAgdm9pZCBzZW5kTW91c2VFdmVudChj
b25zdCBOSVhNb3VzZUV2ZW50Jik7CisgICAgdm9pZCBzZW5kV2hlZWxFdmVudChjb25zdCBOSVhX
aGVlbEV2ZW50Jik7CisgICAgdm9pZCBzZW5kS2V5RXZlbnQoY29uc3QgTklYS2V5RXZlbnQmKTsK
KyAgICB2b2lkIHNlbmRUb3VjaEV2ZW50KGNvbnN0IE5JWFRvdWNoRXZlbnQmKTsKKyAgICB2b2lk
IHNlbmRHZXN0dXJlRXZlbnQoY29uc3QgTklYR2VzdHVyZUV2ZW50Jik7CisKKyAgICBib29sIGlz
U3VzcGVuZGVkKCkgeyByZXR1cm4gcGFnZSgpLT5hcmVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9uc1N1c3BlbmRlZCgpOyB9CisgICAgdm9pZCB2aWV3cG9ydEludGVyYWN0aW9uU3RhcnQoKTsK
KyAgICB2b2lkIHZpZXdwb3J0SW50ZXJhY3Rpb25TdG9wKCk7CisKKyAgICBib29sIHBlbmRpbmdT
Y2FsZU9yUG9zaXRpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdTY2FsZU9yUG9z
aXRpb25DaGFuZ2U7IH0KKworICAgIGZsb2F0IHNjYWxlVG9GaXRDb250ZW50cygpOworICAgIHZv
aWQgYWRqdXN0U2NhbGVUb0ZpdENvbnRlbnRzKCk7CisgICAgdm9pZCBzZXRBdXRvU2NhbGVUb0Zp
dENvbnRlbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2NyZWVuUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKTsKK3Byb3RlY3RlZDoKKyAgICAvLyBXZWJLaXQ6OldlYlZpZXcKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNjYWxlRmFjdG9yKGZsb2F0KSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlUGFnZVNjYWxl
RmFjdG9yKGRvdWJsZSBzY2FsZUZhY3RvcikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBh
Z2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICAvLyBQYWdlQ2xpZW50Lgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGFyZWEpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeUxvYWRJc0JhY2tGb3J3YXJkKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGRpZFN0YXJ0ZWRNYWluRnJhbWVMYXlvdXQoKSBPVkVSUklERTsKKworI2lmIEVO
QUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChj
b25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpIE9WRVJSSURF
OworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRlQ29udGV4dE1l
bnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERSB7IHJldHVybiBtX2FjdGl2ZUNvbnRleHRN
ZW51OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKKworICAgIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOyB9Citw
cml2YXRlOgorICAgIFdlYlZpZXdOaXgoV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3Vw
KiBwYWdlR3JvdXApOworCisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29y
JikgT1ZFUlJJREU7CisKKyAgICBXZWJWaWV3Q2xpZW50Tml4IG1fdmlld0NsaWVudE5peDsKKyAg
ICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RDdXJzb3JQb3NpdGlvbjsKKyAgICBXVEY6OlJlZlB0
cjxXZWJDb250ZXh0TWVudVByb3h5Tml4PiBtX2FjdGl2ZUNvbnRleHRNZW51OworCisgICAgYm9v
bCBtX2R1cmluZ0ZyYW1lUmVuZGVyaW5nOworICAgIGJvb2wgbV9wZW5kaW5nU2NhbGVPclBvc2l0
aW9uQ2hhbmdlOworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9jb250ZW50UG9zaXRpb25BZnRl
clRyYW5zaXRpb247CisgICAgZG91YmxlIG1fc2NhbGVBZnRlclRyYW5zaXRpb247CisgICAgYm9v
bCBtX2xvYWRJc0JhY2tGb3J3YXJkOworICAgIGJvb2wgbV9hZGp1c3RTY2FsZUFmdGVyRmlyc3RN
YWluRnJhbWVSZW5kZXI7CisgICAgYm9vbCBtX2F1dG9TY2FsZVRvRml0Q29udGVudHM7CisKKyAg
ICBmcmllbmQgY2xhc3MgV2ViVmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gV2ViVmlld05peF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219280</attachid>
            <date>2013-12-15 13:20:49 -0800</date>
            <delta_ts>2013-12-20 17:19:20 -0800</delta_ts>
            <desc>Fix style</desc>
            <filename>bug125094.diff</filename>
            <type>text/plain</type>
            <size>50971</size>
            <attacher name="Daker Fernandes Pinheiro">daker.pinheiro</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1NWRjZmU4Li4xZjA2Y2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIx
IEBACisyMDEzLTEyLTEyICBEYWtlciBGZXJuYW5kZXMgUGluaGVpcm8gIDxkYWtlci5waW5oZWly
b0BvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFtOaXhdIEFkZCBvdGhlciBVSVByb2Nlc3MgZmls
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTA5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQ
cm9jZXNzL25peC9UZXh0Q2hlY2tlck5peC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6aXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxE
b2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxp
bmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJP
ZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93
aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1No
b3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVh
cm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAg
ICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE1lbnVQcm94eU5peC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6aGlkZUNvbnRleHRNZW51KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eU5peDo6V2ViQ29udGV4dE1lbnVQcm94
eU5peCk6CisgICAgICAgICogVUlQcm9jZXNzL25peC9XZWJDb250ZXh0Tml4LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OmluaXRJbnNwZWN0b3JTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vz
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHREYXRhYmFz
ZURpcmVjdG9yeSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVs
dEljb25EYXRhYmFzZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9y
bURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3RvcnkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KToKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYkluc3BlY3RvclByb3h5Tml4LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3Rv
clBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVu
KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGlkQ2xvc2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1IaWRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KToK
KyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSXNGcm9udCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFn
ZVVSTCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JCYXNl
VVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVj
dGVkV2luZG93SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtSW5zcGVjdGVkV2luZG93V2lkdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1BdHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1EZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94
eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCk6CisgICAgICAgIChXZWJLaXQ6Oldl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFiaWxpdHlD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtU2V0
VG9vbGJhckhlaWdodCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNhdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1B
cHBlbmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViUGFnZVByb3h5Tml4LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhbmRhcmRVc2VyQWdlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNlYXJjaGVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkUmVjZW50U2VhcmNoZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmluaXRpYWxpemVVSVBvcHVwTWVudUNsaWVudCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL25peC9XZWJQb3B1cE1lbnVMaXN0ZW5lck5peC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5peDo6V2ViUG9wdXBNZW51
TGlzdGVuZXJOaXgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5peDo6
dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlBvcHVwTWVudUxpc3Rl
bmVyTml4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5p
eDo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlByb2Nlc3NQcm94eU5peC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0
TGF1bmNoT3B0aW9ucyk6CisgICAgICAgICogVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRvbmVXaXRo
VG91Y2hFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRpZEZpbmRa
b29tYWJsZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Tml4OjpzZXRDdXJz
b3IpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Q2xpZW50Tml4Ojp1cGRhdGVUZXh0SW5wdXRT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdDbGllbnROaXg6OmRpZENoYW5nZVRvb2x0
aXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViVmlld0NsaWVudE5peC5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6
V2ViVmlld05peCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldEN1cnNvcik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldE5peFZpZXdDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kTW91c2VFdmVudCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdOaXg6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6
c2VuZFdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kS2V5RXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpzZW5kR2VzdHVyZUV2ZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6dmlld3BvcnRJbnRlcmFjdGlvblN0YXJ0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6dmlld3BvcnRJbnRlcmFjdGlvblN0b3ApOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRSZWxhdW5jaFByb2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRDaGFuZ2VDb250ZW50U2NhbGVGYWN0b3IpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXdOaXg6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkQ2hhbmdlUGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkQ2hhbmdlQ29udGVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld05peDo6ZGlkRmluZFpvb21hYmxlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdO
aXg6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
Tml4OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Tml4Ojpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4
Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OmNy
ZWF0ZVBvcHVwTWVudVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6bm90aWZ5
TG9hZElzQmFja0ZvcndhcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Tml4OjpkaWRTdGFy
dGVkTWFpbkZyYW1lTGF5b3V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6YWRqdXN0
U2NhbGVUb0ZpdENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6c2NhbGVU
b0ZpdENvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld05peDo6c2V0QXV0b1NjYWxl
VG9GaXRDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdOaXg6OnNldFNjcmVlblJl
Y3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9uaXgvV2ViVmlld05peC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld05peDo6aXNTdXNwZW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Tml4OjpwZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld05peDo6ZGV2aWNlU2NhbGVGYWN0b3IpOgorCiAyMDEzLTEyLTEyICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBQcmVw
ZW5kIHRoZSBXZWJDb3JlIGxheWVyIGFyY2hpdmVzJyBuYW1lcyB3aXRoICdsaWInCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1RleHRDaGVja2VyTml4LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvVGV4dENoZWNrZXJOaXguY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNmYyODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1RleHRDaGVja2VyTml4LmNwcApAQCAtMCwwICsxLDEz
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgVGV4dENoZWNrZXJTdGF0
ZSB0ZXh0Q2hlY2tlclN0YXRlOworCitjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRleHRDaGVj
a2VyU3RhdGU7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdBbGxvd2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVs
bERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyhpbnQ2NF90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQz
Ml90LCBpbnQzMl90JiwgaW50MzJfdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNo
YXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYs
IGludDMyX3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgVGV4dENoZWNr
ZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNT
aG93aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVX
b3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxU
ZXh0Q2hlY2tlckNvbXBsZXRpb24+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE1lbnVQ
cm94eU5peC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJDb250ZXh0TWVudVBy
b3h5Tml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExM2RiZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE1l
bnVQcm94eU5peC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJT
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJDb250ZXh0TWVudVByb3h5Tml4X2gKKyNkZWZpbmUgV2ViQ29udGV4dE1lbnVQ
cm94eU5peF9oCisKKyNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKKworCisjaW5jbHVkZSAiV2Vi
Q29udGV4dE1lbnVQcm94eS5oIgorI2luY2x1ZGUgIldlYkNvcmUvQ29udGV4dE1lbnUuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJD
b250ZXh0TWVudVByb3h5Tml4IDogcHVibGljIFdlYkNvbnRleHRNZW51UHJveHkgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlOaXg+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlO
aXgpOworICAgIH0KKworICAgIHZvaWQgc2hvd0NvbnRleHRNZW51KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JikgeyB9CisgICAg
dm9pZCBoaWRlQ29udGV4dE1lbnUoKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViQ29udGV4dE1lbnVQ
cm94eU5peCgpIHsgfQorfTsKKworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJDb250ZXh0Tml4LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYTZlMTJlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9uaXgvV2ViQ29udGV4dE5peC5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKworI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3du
UHRyLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JTZXJ2ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RhdGljIHZvaWQgaW5pdEluc3BlY3RvclNlcnZlcigpCit7CisjaWYgRU5B
QkxFKElOU1BFQ1RPUl9TRVJWRVIpCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGluaXRpYWxp
emVkID0gdHJ1ZTsKKyAgICBTdHJpbmcgZW52U3RyKGdfZ2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9S
X1NFUlZFUiIpKTsKKworICAgIGlmICghZW52U3RyLmlzTnVsbCgpKSB7CisgICAgICAgIFN0cmlu
ZyBiaW5kQWRkcmVzcyA9ICIxMjcuMC4wLjEiOworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0
ID0gMjU1NTU7CisKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgICAgICBlbnZT
dHIuc3BsaXQoIjoiLCByZXN1bHQpOworCisgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpID09IDIp
IHsKKyAgICAgICAgICAgIGJpbmRBZGRyZXNzID0gcmVzdWx0WzBdOworICAgICAgICAgICAgYm9v
bCBvayA9IGZhbHNlOworICAgICAgICAgICAgcG9ydCA9IHJlc3VsdFsxXS50b0ludCgmb2spOwor
ICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICBwb3J0ID0gMjk5OTsKKyAgICAg
ICAgfQorICAgICAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLmxpc3RlbihiaW5kQWRk
cmVzcywgcG9ydCk7CisgICAgfQorI2VuZGlmCit9CisKK1N0cmluZyBXZWJDb250ZXh0OjpwbGF0
Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBHT3du
UHRyPGdjaGFyPiBjYWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfY2Fj
aGVfZGlyKCksICJ3ZWJraXRuaXgiLCAiYXBwbGljYXRpb25zIiwgTlVMTCkpOworICAgIHJldHVy
biBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGNhY2hlRGlyZWN0b3J5LmdldCgpKTsKK30KKwor
dm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgaW5pdEluc3BlY3RvclNlcnZl
cigpOworCisjaWYgVVNFKFNPVVApCisgICAgcGFyYW1ldGVycy5pZ25vcmVUTFNFcnJvcnMgPSBm
YWxzZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworI2VuZGlmCit9CisK
K3ZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdERh
dGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBkYXRhYmFzZURp
cmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdG5p
eCIsICJkYXRhYmFzZXMiLCBOVUxMKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZpbGVuYW1lVG9T
dHJpbmcoZGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6
cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJDb250ZXh0Ojpw
bGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAoreworICAgIEdPd25Q
dHI8Z2NoYXI+IHN0b3JhZ2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2Rh
dGFfZGlyKCksICJ3ZWJraXRuaXgiLCAibG9jYWxzdG9yYWdlIiwgTlVMTCkpOworICAgIHJldHVy
biBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCkpOworfQor
CitTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0RGlza0NhY2hlRGlyZWN0b3J5KCkg
Y29uc3QKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBkaXNrQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9m
aWxlbmFtZShnX2dldF91c2VyX2NhY2hlX2RpcigpLCAid2Via2l0bml4IiwgImNhY2hlIiwgTlVM
TCkpOworICAgIHJldHVybiBXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKGRpc2tDYWNoZURpcmVj
dG9yeS5nZXQoKSk7Cit9CisKK1N0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRDb29r
aWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBHT3duUHRyPGdjaGFyPiBjb29raWVT
dG9yYWdlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAi
d2Via2l0bml4IiwgImNvb2tpZXMiLCBOVUxMKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmZpbGVu
YW1lVG9TdHJpbmcoY29va2llU3RvcmFnZURpcmVjdG9yeS5nZXQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9X
ZWJJbnNwZWN0b3JQcm94eU5peC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dl
Ykluc3BlY3RvclByb3h5Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4yYzQ3N2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25p
eC9XZWJJbnNwZWN0b3JQcm94eU5peC5jcHAKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkluc3BlY3Rv
clByb3h5LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW4oKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtRGlkQ2xvc2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtSGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1CcmluZ1RvRnJvbnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SXNGcm9udCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtSW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBXZWJJ
bnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZVVSTCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBXZWJJbnNwZWN0b3JQ
cm94eTo6aW5zcGVjdG9yQmFzZVVSTCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUluc3BlY3RlZFdpbmRvd0hlaWdodCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
SW5zcGVjdGVkV2luZG93V2lkdGgoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQXR0YWNoKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybURldGFjaCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0
Zm9ybVNldEF0dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1BdHRhY2hBdmFpbGFi
aWxpdHlDaGFuZ2VkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1TZXRUb29sYmFySGVpZ2h0KHVuc2lnbmVkKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtU2F2ZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBib29sLCBib29sKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3Jt
QXBwZW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJQYWdl
UHJveHlOaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJQYWdlUHJveHlO
aXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmM3MzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlBhZ2VQcm94eU5p
eC5jcHAKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5n
IEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdFZlcnNp
b24uaCIKKworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCisjZGVmaW5lIFNUUklOR0ZZKFZBTFVFKSAjVkFMVUUKKyNkZWZpbmUg
R0VUX1dFQktJVF9WRVJTSU9OKE1BSk9SLCBNSU5PUikgU1RSSU5HRlkoTUFKT1IpICIuIiBTVFJJ
TkdGWShNSU5PUikKKyNkZWZpbmUgVUFfV0VCS0lUX1ZFUlNJT04gR0VUX1dFQktJVF9WRVJTSU9O
KFdFQktJVF9NQUpPUl9WRVJTSU9OLCBXRUJLSVRfTUlOT1JfVkVSU0lPTikKKworI2lmIFBMQVRG
T1JNKFgxMSkKKyNkZWZpbmUgVUFfUExBVEZPUk0gIlgxMSIKKyNlbHNlCisjZGVmaW5lIFVBX1BM
QVRGT1JNICJVbmtub3duIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcg
V2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9u
TmFtZSkKK3sKKyAgICBXVEY6OlN0cmluZyBvc1ZlcnNpb247CisKKyAgICBzdHJ1Y3QgdXRzbmFt
ZSBuYW1lOworICAgIGlmICh1bmFtZSgmbmFtZSkgIT0gLTEpCisgICAgICAgIG9zVmVyc2lvbiA9
IFdURjo6U3RyaW5nKG5hbWUuc3lzbmFtZSkgKyAiICIgKyBXVEY6OlN0cmluZyhuYW1lLm1hY2hp
bmUpOworICAgIGVsc2UKKyAgICAgICAgb3NWZXJzaW9uID0gIlVua25vd24iOworCisgICAgV1RG
OjpTdHJpbmdCdWlsZGVyIHVzZXJBZ2VudDsKKyAgICB1c2VyQWdlbnQuYXBwZW5kTGl0ZXJhbCgi
TW96aWxsYS81LjAgKCIgVUFfUExBVEZPUk0gIjsgIik7CisgICAgdXNlckFnZW50LmFwcGVuZChv
c1ZlcnNpb24pOworICAgIHVzZXJBZ2VudC5hcHBlbmRMaXRlcmFsKCIpIEFwcGxlV2ViS2l0LyIg
VUFfV0VCS0lUX1ZFUlNJT04gIiAoS0hUTUwsIGxpa2UgR2Vja28pIik7CisgICAgaWYgKCFhcHBs
aWNhdGlvbk5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHVzZXJBZ2VudC5hcHBlbmRMaXRlcmFs
KCIgIik7CisgICAgICAgIHVzZXJBZ2VudC5hcHBlbmQoYXBwbGljYXRpb25OYW1lKTsKKyAgICB9
CisgICAgdXNlckFnZW50LmFwcGVuZExpdGVyYWwoIiBTYWZhcmkvIiBVQV9XRUJLSVRfVkVSU0lP
Tik7CisKKyAgICByZXR1cm4gdXNlckFnZW50LnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoKQoreworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6
Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChWZWN0b3I8V1RGOjpTdHJpbmc+JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6c2F2ZVJlY2VudFNl
YXJjaGVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6bG9hZFJlY2VudFNlYXJjaGVz
KGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVVJUG9wdXBNZW51Q2xpZW50KGNv
bnN0IFdLUGFnZVVJUG9wdXBNZW51Q2xpZW50QmFzZSogY2xpZW50KQoreworICAgIG1fdWlQb3B1
cE1lbnVDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViUG9wdXBNZW51
TGlzdGVuZXJOaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJQb3B1cE1l
bnVMaXN0ZW5lck5peC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlm
YjFkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2Vi
UG9wdXBNZW51TGlzdGVuZXJOaXguY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51TGlzdGVuZXJOaXguaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlBvcHVwTWVudUxp
c3RlbmVyTml4OjpXZWJQb3B1cE1lbnVMaXN0ZW5lck5peChXZWJQb3B1cE1lbnVQcm94eTo6Q2xp
ZW50KiBjbGllbnQpCisgICAgOiBXZWJQb3B1cE1lbnVQcm94eShjbGllbnQpCit7Cit9CisKK3Zv
aWQgV2ViUG9wdXBNZW51TGlzdGVuZXJOaXg6OnZhbHVlQ2hhbmdlZChpbnQgbmV3U2VsZWN0ZWRJ
bmRleCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ns
aWVudC0+dmFsdWVDaGFuZ2VkRm9yUG9wdXBNZW51KHRoaXMsIG5ld1NlbGVjdGVkSW5kZXgpOwor
ICAgIGludmFsaWRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlBvcHVwTWVudUxpc3RlbmVyTml4Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlBvcHVwTWVudUxpc3RlbmVyTml4LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkxZjgwMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViUG9wdXBNZW51TGlzdGVuZXJO
aXguaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJQb3B1cE1lbnVMaXN0ZW5lck5peF9oCisjZGVmaW5lIFdlYlBvcHVwTWVudUxpc3Rl
bmVyTml4X2gKKworI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJQb3B1cE1lbnVMaXN0ZW5lck5peCA6IHB1YmxpYyBXZWJQb3B1
cE1lbnVQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUG9wdXBNZW51
TGlzdGVuZXJOaXg+IGNyZWF0ZShXZWJQb3B1cE1lbnVQcm94eTo6Q2xpZW50KiBjbGllbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlBvcHVwTWVudUxpc3RlbmVyTml4
KGNsaWVudCkpOworICAgIH0KKworICAgIHZvaWQgdmFsdWVDaGFuZ2VkKGludCBuZXdTZWxlY3Rl
ZEluZGV4KTsKKworcHJpdmF0ZToKKyAgICBXZWJQb3B1cE1lbnVMaXN0ZW5lck5peChXZWJQb3B1
cE1lbnVQcm94eTo6Q2xpZW50Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFdlYlBvcHVwTWVudUxpc3RlbmVyTml4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9uaXgvV2ViUHJvY2Vzc1Byb3h5Tml4LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9uaXgvV2ViUHJvY2Vzc1Byb3h5Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi45ZWE5Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL25peC9XZWJQcm9jZXNzUHJveHlOaXguY3BwCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1By
b3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlByb2Nlc3NQcm94eTo6cGxh
dGZvcm1HZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1
bmNoT3B0aW9ucykKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgY29uc3QgY2hhciogd2ViUHJvY2Vz
c0NtZFByZWZpeCA9IGdldGVudigiV0VCX1BST0NFU1NfQ01EX1BSRUZJWCIpOworICAgIGlmICh3
ZWJQcm9jZXNzQ21kUHJlZml4ICYmICp3ZWJQcm9jZXNzQ21kUHJlZml4KQorICAgICAgICBsYXVu
Y2hPcHRpb25zLnByb2Nlc3NDbWRQcmVmaXggPSBTdHJpbmc6OmZyb21VVEY4KHdlYlByb2Nlc3ND
bWRQcmVmaXgpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGF1bmNoT3B0aW9ucyk7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdDbGllbnROaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NDM3N2I1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YlZpZXdDbGllbnROaXguaCIKKworI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCisjaW5jbHVkZSAi
V2ViVmlld05peC5oIgorI2luY2x1ZGUgPGNzdHJpbmc+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFdlYlZpZXdDbGllbnROaXg6OmRvbmVXaXRoVG91Y2hFdmVudChXZWJWaWV3KiB2aWV3
LCBjb25zdCBOSVhUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCit7Cisg
ICAgaWYgKCFtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQodG9BUEkodmlldyksICZldmVudCwgd2FzRXZl
bnRIYW5kbGVkLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdD
bGllbnROaXg6OmRpZEZpbmRab29tYWJsZUFyZWEoV2ViVmlldyogdmlldywgV0tQb2ludCB0YXJn
ZXQsIFdLUmVjdCBhcmVhKQoreworICAgIGlmICghbV9jbGllbnQuZGlkRmluZFpvb21hYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xpZW50LmRpZEZpbmRab29tYWJsZUFyZWEodG9B
UEkodmlldyksIHRhcmdldCwgYXJlYSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKK30KKwor
dm9pZCBXZWJWaWV3Q2xpZW50Tml4OjpzZXRDdXJzb3IoV2ViVmlldyogdmlldywgdW5zaWduZWQg
c2hhcGUpCit7CisgICAgaWYgKCFtX2NsaWVudC5zZXRDdXJzb3IpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NsaWVudC5zZXRDdXJzb3IodG9BUEkodmlldyksIHNoYXBlLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnROaXg6OnVwZGF0ZVRleHRJbnB1
dFN0YXRlKFdlYlZpZXcqIHZpZXcsIGNvbnN0IEVkaXRvclN0YXRlJiBzdGF0ZSkKK3sKKyAgICBp
ZiAoIW1fY2xpZW50LnVwZGF0ZVRleHRJbnB1dFN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBOSVhUZXh0SW5wdXRTdGF0ZSBuaXhTdGF0ZTsKKyAgICBQcm94eWluZ1JlZlB0cjxXZWJTdHJp
bmc+IHNlbGVjdGVkVGV4dCA9IHRvQVBJKHN0YXRlLnNlbGVjdGVkVGV4dC5pbXBsKCkpOworICAg
IFByb3h5aW5nUmVmUHRyPFdlYlN0cmluZz4gc3Vycm91bmRpbmdUZXh0ID0gdG9BUEkoc3RhdGUu
c3Vycm91bmRpbmdUZXh0LmltcGwoKSk7CisgICAgUHJveHlpbmdSZWZQdHI8V2ViU3RyaW5nPiBz
dWJtaXRMYWJlbCA9IHRvQVBJKHN0YXRlLnN1Ym1pdExhYmVsLmltcGwoKSk7CisKKyAgICBuaXhT
dGF0ZS5zZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CisgICAgbml4U3RhdGUuc3Vycm91bmRp
bmdUZXh0ID0gc3Vycm91bmRpbmdUZXh0OworICAgIG5peFN0YXRlLnN1Ym1pdExhYmVsID0gc3Vi
bWl0TGFiZWw7CisgICAgbml4U3RhdGUuaW5wdXRNZXRob2RIaW50cyA9IHN0YXRlLmlucHV0TWV0
aG9kSGludHM7CisgICAgbml4U3RhdGUuaXNDb250ZW50RWRpdGFibGUgPSBzdGF0ZS5pc0NvbnRl
bnRFZGl0YWJsZTsKKyAgICBuaXhTdGF0ZS5jdXJzb3JQb3NpdGlvbiA9IHN0YXRlLmN1cnNvclBv
c2l0aW9uOworICAgIG5peFN0YXRlLmFuY2hvclBvc2l0aW9uID0gc3RhdGUuYW5jaG9yUG9zaXRp
b247CisgICAgbml4U3RhdGUuY3Vyc29yUmVjdCA9IHRvQVBJKHN0YXRlLmN1cnNvclJlY3QpOwor
ICAgIG5peFN0YXRlLmVkaXRvclJlY3QgPSB0b0FQSShzdGF0ZS5lZGl0b3JSZWN0KTsKKworICAg
IG1fY2xpZW50LnVwZGF0ZVRleHRJbnB1dFN0YXRlKHRvQVBJKHZpZXcpLCAmbml4U3RhdGUsIG1f
Y2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudE5peDo6ZGlk
Q2hhbmdlVG9vbHRpcChXZWJWaWV3KiB2aWV3LCBjb25zdCBXS1N0cmluZ1JlZiB0b29sdGlwKQor
eworICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlVG9vbHRpcCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY2xpZW50LmRpZENoYW5nZVRvb2x0aXAodG9BUEkodmlldyksIHRvb2x0aXAsIG1fY2xp
ZW50LmJhc2UuY2xpZW50SW5mbyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdDbGllbnROaXguaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDM5ZTYwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL25peC9XZWJWaWV3Q2xpZW50Tml4LmgKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld0NsaWVu
dE5peF9oCisjZGVmaW5lIFdlYlZpZXdDbGllbnROaXhfaAorCisjaW5jbHVkZSAiQVBJQ2xpZW50
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5JWFZpZXcuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEFQSSB7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBDbGllbnRUcmFpdHM8TklYVmlld0NsaWVudEJhc2U+IHsKKyAgICB0eXBlZGVmIHN0ZDo6
dHVwbGU8TklYVmlld0NsaWVudFYwPiBWZXJzaW9uczsKK307Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJWaWV3Oworc3RydWN0IEVkaXRvclN0YXRlOworCitjbGFzcyBXZWJW
aWV3Q2xpZW50Tml4IDogcHVibGljIEFQSTo6Q2xpZW50PE5JWFZpZXdDbGllbnRCYXNlPiB7Citw
dWJsaWM6CisgICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoV2ViVmlldyosIGNvbnN0IE5JWFRv
dWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCk7CisgICAgdm9pZCBkaWRGaW5kWm9vbWFi
bGVBcmVhKFdlYlZpZXcqLCBXS1BvaW50IHRhcmdldCwgV0tSZWN0IGFyZWEpOworICAgIHZvaWQg
dXBkYXRlVGV4dElucHV0U3RhdGUoV2ViVmlldyosIGNvbnN0IEVkaXRvclN0YXRlJik7CisgICAg
dm9pZCBzZXRDdXJzb3IoV2ViVmlldyosIHVuc2lnbmVkKTsKKyAgICB2b2lkIGRpZENoYW5nZVRv
b2x0aXAoV2ViVmlldyosIGNvbnN0IFdLU3RyaW5nUmVmIHRvb2x0aXApOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJWaWV3Q2xpZW50Tml4X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViVmlld05peC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjMjI0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguY3BwCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYlZpZXdOaXguaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eS5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKKyNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdGl2
ZVdlYldoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnlOaXguaCIKKyNpbmNsdWRlICJXZWJQ
YWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQb3B1cE1lbnVMaXN0ZW5lck5peC5oIgorI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJHTC5oPgorCisjaW5j
bHVkZSA8Z2xpYi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK1Bhc3NSZWZQdHI8V2ViVmlldz4gV2ViVmlldzo6Y3JlYXRlKFdlYkNvbnRleHQq
IGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKQoreworI2lmICFHTElCX0NIRUNLX1ZF
UlNJT04oMiwgMzUsIDApCisgICAgZ190eXBlX2luaXQoKTsKKyNlbmRpZgorICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViVmlld05peChjb250ZXh0LCBwYWdlR3JvdXApKTsKK30KKworV2ViVmll
d05peDo6V2ViVmlld05peChXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VH
cm91cCkKKyAgICA6IFdlYlZpZXcoY29udGV4dCwgcGFnZUdyb3VwKQorICAgICwgbV9hY3RpdmVD
b250ZXh0TWVudShXZWJDb250ZXh0TWVudVByb3h5Tml4OjpjcmVhdGUoKSkKKyAgICAsIG1fZHVy
aW5nRnJhbWVSZW5kZXJpbmcoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdTY2FsZU9yUG9zaXRpb25D
aGFuZ2UoZmFsc2UpCisgICAgLCBtX3NjYWxlQWZ0ZXJUcmFuc2l0aW9uKDEuMCkKKyAgICAsIG1f
bG9hZElzQmFja0ZvcndhcmQoZmFsc2UpCisgICAgLCBtX2FkanVzdFNjYWxlQWZ0ZXJGaXJzdE1h
aW5GcmFtZVJlbmRlcihmYWxzZSkKKyAgICAsIG1fYXV0b1NjYWxlVG9GaXRDb250ZW50cyh0cnVl
KQoreworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJz
b3ImIGN1cnNvcikKK3sKKyAgICB1bnNpZ25lZCBpbnQgc2hhcGUgPSBjdXJzb3IucGxhdGZvcm1D
dXJzb3IoKTsKKyAgICBtX3ZpZXdDbGllbnROaXguc2V0Q3Vyc29yKHRoaXMsIHNoYXBlKTsKK30K
Kwordm9pZCBXZWJWaWV3Tml4OjpzZXROaXhWaWV3Q2xpZW50KGNvbnN0IE5JWFZpZXdDbGllbnRC
YXNlKiB2aWV3Q2xpZW50KQoreworICAgIG1fdmlld0NsaWVudE5peC5pbml0aWFsaXplKHZpZXdD
bGllbnQpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNlbmRNb3VzZUV2ZW50KGNvbnN0IE5JWE1v
dXNlRXZlbnQmIGV2ZW50KQoreworICAgIHBhZ2UoKS0+aGFuZGxlTW91c2VFdmVudChOYXRpdmVX
ZWJNb3VzZUV2ZW50KGV2ZW50LCAmbV9sYXN0Q3Vyc29yUG9zaXRpb24pKTsKK30KKwordm9pZCBX
ZWJWaWV3Tml4OjpzZW5kVG91Y2hFdmVudChjb25zdCBOSVhUb3VjaEV2ZW50JiBldmVudCkKK3sK
KyAgICBwYWdlKCktPmhhbmRsZVRvdWNoRXZlbnQoTmF0aXZlV2ViVG91Y2hFdmVudChldmVudCkp
OworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNlbmRXaGVlbEV2ZW50KGNvbnN0IE5JWFdoZWVsRXZl
bnQmIGV2ZW50KQoreworICAgIHBhZ2UoKS0+aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVl
bEV2ZW50KGV2ZW50KSk7Cit9CisKK3ZvaWQgV2ViVmlld05peDo6c2VuZEtleUV2ZW50KGNvbnN0
IE5JWEtleUV2ZW50JiBldmVudCkKK3sKKyAgICBwYWdlKCktPmhhbmRsZUtleWJvYXJkRXZlbnQo
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChldmVudCkpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNl
bmRHZXN0dXJlRXZlbnQoY29uc3QgTklYR2VzdHVyZUV2ZW50JiBldmVudCkKK3sKKyAgICBXZWJQ
bGF0Zm9ybVRvdWNoUG9pbnQgcG9pbnQoMCwgV2ViUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFBy
ZXNzZWQsIEludFBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2ZW50Lmdsb2JhbFkpLAorICAgIEludFBv
aW50KGV2ZW50LngsIGV2ZW50LnkpLCBJbnRTaXplKGV2ZW50LndpZHRoLCBldmVudC5oZWlnaHQp
KTsKKyAgICBwYWdlKCktPmhhbmRsZVNpbmdsZVRhcChldmVudC50aW1lc3RhbXAsIHBvaW50KTsK
K30KKwordm9pZCBXZWJWaWV3Tml4OjpmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV0tQ
b2ludCYgcG9pbnQsIGludCBob3Jpem9udGFsUmFkaXVzLCBpbnQgdmVydGljYWxSYWRpdXMpCit7
CisgICAgSW50UG9pbnQgY29udGVudHNQb2ludChwb2ludC54LCBwb2ludC55KTsKKyAgICBJbnRT
aXplIHRvdWNoU2l6ZShob3Jpem9udGFsUmFkaXVzICogMiwgdmVydGljYWxSYWRpdXMgKiAyKTsK
KyAgICBwYWdlKCktPmZpbmRab29tYWJsZUFyZWFGb3JQb2ludChjb250ZW50c1BvaW50LCB0b3Vj
aFNpemUpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnZpZXdwb3J0SW50ZXJhY3Rpb25TdGFydCgp
Cit7CisgICAgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3Zv
aWQgV2ViVmlld05peDo6dmlld3BvcnRJbnRlcmFjdGlvblN0b3AoKQoreworICAgIGlmIChwYWdl
KCktPnBhZ2VTY2FsZUZhY3RvcigpICE9IGNvbnRlbnRTY2FsZUZhY3RvcigpKQorICAgICAgICBw
YWdlKCktPnNjYWxlUGFnZShjb250ZW50U2NhbGVGYWN0b3IoKSwgcm91bmRlZEludFBvaW50KGNv
bnRlbnRQb3NpdGlvbigpKSk7CisgICAgdXBkYXRlVmlld3BvcnRTaXplKCk7CisgICAgcmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBXZWJWaWV3Tml4Ojpk
aWRSZWxhdW5jaFByb2Nlc3MoKQoreworICAgIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpLT5z
ZXRBY3RpdmUodHJ1ZSk7CisgICAgbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKHRoaXMp
OworfQorCit2b2lkIFdlYlZpZXdOaXg6OmRpZENoYW5nZUNvbnRlbnRTY2FsZUZhY3RvcihmbG9h
dCBzY2FsZUZhY3RvcikKK3sKKyAgICBpZiAoaXNTdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIHBhZ2UoKS0+c2NhbGVQYWdlKHNjYWxlRmFjdG9yLCByb3VuZGVkSW50UG9pbnQoY29u
dGVudFBvc2l0aW9uKCkpKTsKKyAgICB1cGRhdGVWaWV3cG9ydFNpemUoKTsKK30KKwordm9pZCBX
ZWJWaWV3Tml4OjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
Cit7CisgICAgaWYgKG1fZHVyaW5nRnJhbWVSZW5kZXJpbmcgJiYgKG1fcGVuZGluZ1NjYWxlT3JQ
b3NpdGlvbkNoYW5nZSB8fCBwb3NpdGlvbiAhPSBtX2NvbnRlbnRQb3NpdGlvbikpIHsKKyAgICAg
ICAgbV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgbV9jb250
ZW50UG9zaXRpb25BZnRlclRyYW5zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgV2ViVmlldzo6cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zaXRpb24pOworfQorCit2b2lkIFdl
YlZpZXdOaXg6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV9kdXJp
bmdGcmFtZVJlbmRlcmluZyA9IGZhbHNlOworICAgIGlmIChtX3BlbmRpbmdTY2FsZU9yUG9zaXRp
b25DaGFuZ2UpIHsKKyAgICAgICAgbV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlID0gZmFs
c2U7CisgICAgICAgIGlmIChtX3NjYWxlQWZ0ZXJUcmFuc2l0aW9uICE9IG1fY29udGVudFNjYWxl
RmFjdG9yKQorICAgICAgICAgICAgbV9jb250ZW50U2NhbGVGYWN0b3IgPSBtX3NjYWxlQWZ0ZXJU
cmFuc2l0aW9uOworCisgICAgICAgIGlmIChtX2NvbnRlbnRQb3NpdGlvbiAhPSBtX2NvbnRlbnRQ
b3NpdGlvbkFmdGVyVHJhbnNpdGlvbikKKyAgICAgICAgICAgIHNldENvbnRlbnRQb3NpdGlvbiht
X2NvbnRlbnRQb3NpdGlvbkFmdGVyVHJhbnNpdGlvbik7CisgICAgfQorCisgICAgaWYgKG1fYWRq
dXN0U2NhbGVBZnRlckZpcnN0TWFpbkZyYW1lUmVuZGVyKSB7CisgICAgICAgIG1fYWRqdXN0U2Nh
bGVBZnRlckZpcnN0TWFpbkZyYW1lUmVuZGVyID0gZmFsc2U7CisgICAgICAgIGFkanVzdFNjYWxl
VG9GaXRDb250ZW50cygpOworICAgIH0KKworICAgIFdlYlZpZXc6OmRpZFJlbmRlckZyYW1lKGNv
bnRlbnRzU2l6ZSwgY292ZXJlZFJlY3QpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OmRpZENoYW5n
ZVBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3IpCit7CisgICAgaWYgKG1fZHVyaW5n
RnJhbWVSZW5kZXJpbmcgJiYgKG1fcGVuZGluZ1NjYWxlT3JQb3NpdGlvbkNoYW5nZSB8fCBzY2Fs
ZUZhY3RvciAhPSBtX2NvbnRlbnRTY2FsZUZhY3RvcikpIHsKKyAgICAgICAgbV9wZW5kaW5nU2Nh
bGVPclBvc2l0aW9uQ2hhbmdlID0gdHJ1ZTsKKyAgICAgICAgbV9zY2FsZUFmdGVyVHJhbnNpdGlv
biA9IHNjYWxlRmFjdG9yOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRlbnRTY2FsZUZhY3Rv
ciA9IHNjYWxlRmFjdG9yOworfQorCit2b2lkIFdlYlZpZXdOaXg6OmRpZENoYW5nZUNvbnRlbnRQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQorewor
ICAgIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSByZWludGVycHJl
dF9jYXN0PENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEo
KSk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KGNvbnRlbnRQb3NpdGlvbigpLCB2aXNpYmxlQ29udGVudHNT
aXplKCkpOworICAgIHZpc2libGVDb250ZW50c1JlY3QuaW50ZXJzZWN0KEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGNvbnRlbnRzU2l6ZSgpKSk7CisgICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVD
b250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7Cit9CisK
K3ZvaWQgV2ViVmlld05peDo6ZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBJbnRQb2ludCYgdGFy
Z2V0LCBjb25zdCBJbnRSZWN0JiBhcmVhKQoreworICAgIG1fdmlld0NsaWVudE5peC5kaWRGaW5k
Wm9vbWFibGVBcmVhKHRoaXMsIHRvQVBJKHRhcmdldCksIHRvQVBJKGFyZWEpKTsKK30KKwordm9p
ZCBXZWJWaWV3Tml4OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKCkKK3sKKyAgICBtX2R1cmlu
Z0ZyYW1lUmVuZGVyaW5nID0gdHJ1ZTsKKyAgICBtX3BlbmRpbmdTY2FsZU9yUG9zaXRpb25DaGFu
Z2UgPSBmYWxzZTsKKyAgICBtX2NvbnRlbnRQb3NpdGlvbkFmdGVyVHJhbnNpdGlvbiA9IFdlYkNv
cmU6OkZsb2F0UG9pbnQoKTsKKyAgICBtX3NjYWxlQWZ0ZXJUcmFuc2l0aW9uID0gMS4wOworfQor
Cit2b2lkIFdlYlZpZXdOaXg6OnBhZ2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpCit7CisgICAg
cGFnZSgpLT5jb21taXRQYWdlVHJhbnNpdGlvblZpZXdwb3J0KCk7IC8vIEZJWE1FOiBpcyB0aGlz
IGNvcnJlY3QvbmVlZGVkPworICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24o
dGhpcyk7IC8vIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QvbmVlZGVkPworfQorCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKK3ZvaWQgV2ViVmlld05peDo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0
IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKK3sKKyAg
ICBtX3ZpZXdDbGllbnROaXguZG9uZVdpdGhUb3VjaEV2ZW50KHRoaXMsICpldmVudC5uYXRpdmVF
dmVudCgpLCB3YXNFdmVudEhhbmRsZWQpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlld05peDo6
dXBkYXRlVGV4dElucHV0U3RhdGUoKQoreworICAgIG1fdmlld0NsaWVudE5peC51cGRhdGVUZXh0
SW5wdXRTdGF0ZSh0aGlzLCBwYWdlKCktPmVkaXRvclN0YXRlKCkpOworfQorCisKK1Bhc3NSZWZQ
dHI8V2ViUG9wdXBNZW51UHJveHk+IFdlYlZpZXdOaXg6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICByZXR1cm4gV2ViUG9wdXBNZW51TGlzdGVuZXJOaXg6
OmNyZWF0ZShwYWdlKTsKK30KKwordm9pZCBXZWJWaWV3Tml4Ojpub3RpZnlMb2FkSXNCYWNrRm9y
d2FyZCgpCit7CisgICAgbV9sb2FkSXNCYWNrRm9yd2FyZCA9IHRydWU7Cit9CisKK3ZvaWQgV2Vi
Vmlld05peDo6ZGlkU3RhcnRlZE1haW5GcmFtZUxheW91dCgpCit7CisgICAgaWYgKG1fbG9hZElz
QmFja0ZvcndhcmQgfHwgbV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdlKSB7CisgICAgICAg
IGlmIChtX2F1dG9TY2FsZVRvRml0Q29udGVudHMgJiYgIW1fbG9hZElzQmFja0ZvcndhcmQgJiYg
bV9wYWdlLT51c2VGaXhlZExheW91dCgpKQorICAgICAgICAgICAgbV9hZGp1c3RTY2FsZUFmdGVy
Rmlyc3RNYWluRnJhbWVSZW5kZXIgPSB0cnVlOworCisgICAgICAgIG1fbG9hZElzQmFja0Zvcndh
cmQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3Tml4
OjphZGp1c3RTY2FsZVRvRml0Q29udGVudHMoKQoreworICAgIGZsb2F0IHNjYWxlID0gc2NhbGVU
b0ZpdENvbnRlbnRzKCk7CisgICAgc2V0Q29udGVudFNjYWxlRmFjdG9yKHNjYWxlKTsKK30KKwor
ZmxvYXQgV2ViVmlld05peDo6c2NhbGVUb0ZpdENvbnRlbnRzKCkKK3sKKyAgICByZXR1cm4gc2l6
ZSgpLndpZHRoKCkgLyAobV9jb250ZW50c1NpemUud2lkdGgoKSAqIGRldmljZVNjYWxlRmFjdG9y
KCkpOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNldEF1dG9TY2FsZVRvRml0Q29udGVudHMoYm9v
bCBlbmFibGUpCit7CisgICAgbV9hdXRvU2NhbGVUb0ZpdENvbnRlbnRzID0gZW5hYmxlOworICAg
IGlmICghbV9hdXRvU2NhbGVUb0ZpdENvbnRlbnRzKQorICAgICAgICBtX2FkanVzdFNjYWxlQWZ0
ZXJGaXJzdE1haW5GcmFtZVJlbmRlciA9IGZhbHNlOworfQorCit2b2lkIFdlYlZpZXdOaXg6OnNl
dFNjcmVlblJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWN0KQoreworICAgIG1fcGFn
ZS0+c2V0U2NyZWVuUmVjdChyZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9uaXgvV2ViVmlld05peC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE1ZDZiZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvbml4L1dlYlZpZXdOaXguaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDEzIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld05peF9oCisjZGVmaW5lIFdlYlZp
ZXdOaXhfaAorCisjaW5jbHVkZSAiTklYRXZlbnRzLmgiCisjaW5jbHVkZSAiTklYVmlldy5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSAiV2ViQ29u
dGV4dE1lbnVQcm94eU5peC5oIgorI2luY2x1ZGUgIldlYlZpZXdDbGllbnROaXguaCIKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViUG9wdXBJdGVtUGxhdGZvcm0uaCIKKyNpbmNs
dWRlICJXZWJQb3B1cE1lbnVMaXN0ZW5lci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3Tml4IDogcHVibGljIFdlYlZpZXcgeworcHVibGlj
OgorICAgIHZvaWQgc2V0Tml4Vmlld0NsaWVudChjb25zdCBOSVhWaWV3Q2xpZW50QmFzZSopOwor
CisgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV0tQb2ludCYsIGludCBo
b3Jpem9udGFsUmFkaXVzLCBpbnQgdmVydGljYWxSYWRpdXMpOworCisgICAgdm9pZCBzZW5kTW91
c2VFdmVudChjb25zdCBOSVhNb3VzZUV2ZW50Jik7CisgICAgdm9pZCBzZW5kV2hlZWxFdmVudChj
b25zdCBOSVhXaGVlbEV2ZW50Jik7CisgICAgdm9pZCBzZW5kS2V5RXZlbnQoY29uc3QgTklYS2V5
RXZlbnQmKTsKKyAgICB2b2lkIHNlbmRUb3VjaEV2ZW50KGNvbnN0IE5JWFRvdWNoRXZlbnQmKTsK
KyAgICB2b2lkIHNlbmRHZXN0dXJlRXZlbnQoY29uc3QgTklYR2VzdHVyZUV2ZW50Jik7CisKKyAg
ICBib29sIGlzU3VzcGVuZGVkKCkgeyByZXR1cm4gcGFnZSgpLT5hcmVBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9uc1N1c3BlbmRlZCgpOyB9CisgICAgdm9pZCB2aWV3cG9ydEludGVyYWN0aW9u
U3RhcnQoKTsKKyAgICB2b2lkIHZpZXdwb3J0SW50ZXJhY3Rpb25TdG9wKCk7CisKKyAgICBib29s
IHBlbmRpbmdTY2FsZU9yUG9zaXRpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdT
Y2FsZU9yUG9zaXRpb25DaGFuZ2U7IH0KKworICAgIGZsb2F0IHNjYWxlVG9GaXRDb250ZW50cygp
OworICAgIHZvaWQgYWRqdXN0U2NhbGVUb0ZpdENvbnRlbnRzKCk7CisgICAgdm9pZCBzZXRBdXRv
U2NhbGVUb0ZpdENvbnRlbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2NyZWVuUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKK3Byb3RlY3RlZDoKKyAgICAvLyBXZWJLaXQ6OldlYlZpZXcK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudFNjYWxlRmFjdG9yKGZsb2F0KSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudFBvc2l0aW9uKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
UGFnZVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3RvcikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICAvLyBQYWdl
Q2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGFyZWEpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUxvYWRJc0JhY2tGb3J3YXJkKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0ZWRNYWluRnJhbWVMYXlvdXQoKSBPVkVSUklERTsK
KworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91
Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQp
IE9WRVJSSURFOworI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRl
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gY3JlYXRl
Q29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERSB7IHJldHVybiBtX2FjdGl2
ZUNvbnRleHRNZW51OyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqKSBPVkVSUklERTsKKworICAgIGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpOyB9Citwcml2YXRlOgorICAgIFdlYlZpZXdOaXgoV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91
cCopOworCisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgT1ZFUlJJ
REU7CisKKyAgICBXZWJWaWV3Q2xpZW50Tml4IG1fdmlld0NsaWVudE5peDsKKyAgICBXZWJDb3Jl
OjpJbnRQb2ludCBtX2xhc3RDdXJzb3JQb3NpdGlvbjsKKyAgICBXVEY6OlJlZlB0cjxXZWJDb250
ZXh0TWVudVByb3h5Tml4PiBtX2FjdGl2ZUNvbnRleHRNZW51OworCisgICAgYm9vbCBtX2R1cmlu
Z0ZyYW1lUmVuZGVyaW5nOworICAgIGJvb2wgbV9wZW5kaW5nU2NhbGVPclBvc2l0aW9uQ2hhbmdl
OworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9jb250ZW50UG9zaXRpb25BZnRlclRyYW5zaXRp
b247CisgICAgZG91YmxlIG1fc2NhbGVBZnRlclRyYW5zaXRpb247CisgICAgYm9vbCBtX2xvYWRJ
c0JhY2tGb3J3YXJkOworICAgIGJvb2wgbV9hZGp1c3RTY2FsZUFmdGVyRmlyc3RNYWluRnJhbWVS
ZW5kZXI7CisgICAgYm9vbCBtX2F1dG9TY2FsZVRvRml0Q29udGVudHM7CisKKyAgICBmcmllbmQg
Y2xhc3MgV2ViVmlldzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
V2ViVmlld05peF9oCg==
</data>
<flag name="commit-queue"
          id="243481"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>